Development Tip

UTF8을 사용한 MySQL 명령 줄 형식

yourdevel 2020. 12. 4. 21:02
반응형

UTF8을 사용한 MySQL 명령 줄 형식


스웨덴어 / 노르웨이어 문자열이 포함 된 데이터베이스 테이블이 있습니다.

일부 데이터를 쿼리하면 다음과 같은 출력이 표시됩니다.

출력 set names latin1;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interi#####                   | 
| Bwg Homes                         | 
| If Skadef####kring                | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

이제 set names utf8;적절한 인코딩으로 문자를 보려면 MySQL 명령 줄의 표 형식 출력 형식이 중단됩니다.

출력 set names utf8;

+-----------------------------------+
| name                              |
+-----------------------------------+
| Kid Interiør                     | 
| Bwg Homes                         | 
| If Skadeförsäkring              | 
| Jangaard Export                   | 
| Nordisk Film                      | 
+-----------------------------------+

질문:

이것은 큰 문제는 아니지만 출력을 읽기가 조금 더 어렵게 만듭니다. 아무도 표 형식을 그대로 유지하는 방법을 알고 있습니까?


짧은 답변

다음 옵션을 사용하여 클라이언트를 시작하십시오 --default-character-set=utf8.

mysql --default-character-set=utf8

이것을 /etc/mysql/my.cnf파일 에서 기본값으로 설정할 수 있습니다 .

[mysql]
default-character-set=utf8

짧은 대답이 작동하지 않았습니다. 아래를 읽으십시오.

위의 명령은 character_set_client, character_set_connectioncharacter_set_resultsconfig 변수를 utf8.

모든 charset 관련 구성 변수의 값을 확인하려면 다음을 실행할 수 있습니다.

show variables like '%char%';

character_set_database당신에게 당신의 것을 현재 데이터베이스 (스키마)의 문자 집합을 제공합니다. 스키마와 테이블에 지정된 캐릭터 세트와 기본적으로 생성되어 character_set_server그것이 명시 적으로 지정되지 않는 한, CREATE문.

character_set_server에서 변경할 수 있습니다 my.cnf파일 :

[mysqld]
character-set-server = utf8

또한 테이블과 열은 부모 테이블 또는 스키마와 다를 수있는 자체 문자 집합을 가질 수 있습니다. 데이터베이스의 각 테이블과 열의 값을 구체적으로 확인하려면이 답변을 참조하십시오. MySQL 데이터베이스 / 테이블 / 열이 어떤 문자 집합인지 어떻게 알 수 있습니까?

기존 테이블 및 열의 문자 집합을 변경하려면이 답변을 참조하십시오 . 전체 MySQL 데이터베이스 문자 집합 및 데이터 정렬을 UTF-8로 변환하는 방법?

mysql 문서 의 연결 문자 집합에 대한 자세한 정보 .

모든 것이 utf8로 설정되어 있지만 여전히 이상한 문자가 보입니다.

모든 charsets 변수, 테이블 및 열이로 설정되어 utf8있어도 화면에 이상한 문자가 표시되는 경우가있을 수 있습니다. 예를 들어 누군가가 연결이 utf8있는 클라이언트를 통해 latin1(예 :를 실행 하여) 열에 유니 코드 문자를 작성했을 수 있습니다 mysql --default-character-set=utf8. 이 경우 값이 기록 된 것과 동일한 문자 집합을 사용하여 데이터베이스에 연결해야합니다. 올바른 인코딩을 통해 검색하고 다시 쓸 수도 있습니다.

NOTE: As the comments point out, the myslq utf8 encoding is not a true and full implementation of UTF-8. If a full implementation of UTF-8 is needed, one can use the utf8mb4 charset:

mysql --default-character-set=utf8mb4

More info here: What is the difference between utf8mb4 and utf8 charsets in MySQL?


These words "ø ö ä" with utf8 takes 2 bytes, so did you forget use wchar or utf string?

Here's my test code in python:

s = ["Kid Interiør","Bwg Homes","If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|' 

the result is as the same as your program print out. all I need to do is change the encoding of string s:

s = [u"Kid Interiør",u"Bwg Homes",u"If Skadeförsäkring"]
for w in s:
    print '|',w.ljust(20,' '),'|'

the result is

| Kid Interiør         |
| Bwg Homes            |
| If Skadeförsäkring   |

I haven't test in c++, but I suggest you can use wchar, std::wcout.

참고URL : https://stackoverflow.com/questions/6787824/mysql-command-line-formatting-with-utf8

반응형