이 글은 주로 mysql 중국어 데이터 관련 이슈를 소개합니다. 도움이 필요한 친구들에게 도움이 되었으면 좋겠습니다!
추천 참고 튜토리얼: "mysql 튜토리얼"
중국어 데이터 문제의 본질은 문자 집합의 문제입니다.
컴퓨터는 바이너리 데이터만 인식하고 인간은 문자(기호)를 인식하는 경향이 더 높기 때문에 바이너리와 문자 간의 대응이 필요하며, 이는 문자 집합입니다.
MySQL 데이터베이스의 클라이언트를 통해 서버에 중국어 데이터를 삽입할 때 실패할 수 있습니다. 이유는 클라이언트와 서버의 문자 집합 설정이 다르기 때문일 수 있습니다. 예:
문자 집합 클라이언트의 gbk
이면 한자 하나가 2바이트에 해당합니다. gbk
,则一个中文字符,对应两个字节;
服务器的字符集为utf8
,则一个中文字符,对应三个字节。
这样显然会在编码转换的过程中出现问题,从而导致插入中文数据失败。
由于所有的数据库服务器表现的一些特性都是通过服务器端的变量来保持的,因此系统会先读取自己的变量,看看具体的表现形式。这样的话,咱们就可以通过以下语句查看服务器到底识别哪些字符集:
-- 查看服务器识别的全部字符集show character set;
通过以上查询,咱们会发现:服务器是万能的,其支持所有字符集。
既然服务器支持这么多字符集,总会有一种是服务器默认的和客户端打交道的字符集。因此,咱们可以通过以下语句查看服务器默认的对外处理的字符集:
-- 查看服务器默认的对外处理的字符集show variables like &#MySQL 튜토리얼의 중국어 데이터 문제9;character_set%&#MySQL 튜토리얼의 중국어 데이터 문제9;;
标注MySQL 튜토리얼의 중국어 데이터 문제:服务器默认的客户端传来的数据字符集为utf8
;
标注2:连接层字符集为utf8
;
标注MySQL 튜토리얼의 중국어 데이터 문제:当前数据库的字符集为utf8
;
标注MySQL 튜토리얼의 중국어 데이터 문제:服务器默认的对外处理的字符集utf8
.
通过以上查询,咱们会发现:服务器默认的对外处理的字符集是utf8
.
那么反过来,咱们在通过客户端的属性查看客户端支持的字符集:
显然,咱们已经找到了问题的根源,确实是:客户端支持的字符集为gbk
,而服务器默认的对外处理的字符集为utf8
,因此产生矛盾。
既然问题已经找到了,那么解决方案就是:修改服务器默认接收的字符集为gbk
.
-- 修改服务器默认接收的字符集为 GBK(不区分大小写)set character_set_client = gbk;
这样的话,咱们再插入中文数据的时候,就会插入成功啦!But,在咱们查看数据的时候,又发现了一个问题,就是之前咱们插入的中文数据显示乱码啦!不过这也正常,因为查询的时候,数据的来源是服务器(utf8
),解析数据的是客户端,而客户端仅识别gbk
格式的数据,显示乱码也就在意料之中啦!
因此,解决方案就是:修改服务器给客户端的数据字符集为gbk
.
-- 修改服务器给客户端的数据字符集为 GBK(不区分大小写)set character_set_results = gbk;
如上图所示,向服务器插入中文数据的问题已经解决啦!
此外,咱们之前使用的 SQL 语句:
-- 修改的只是会话级别,即当前客户端当次连接有效,关闭后失效set 变量 = 值;
这样的话,每当咱们重启客户端的时候,都要依次重新进行设置,比较麻烦,因此咱们可以使用快捷的设置方式,即:
set names 字符集;
例如,
/** * 恒等于 set character_set_client = gbk; * 恒等于 set character_set_results = gbk; * 恒等于 set character_set_connection = gbk; */set names gbk;
表示上述一条语句,将同时改变三个变量的值。其中,connection
为连接层,是字符集转换的中间者,如果其和client
和results
서버의 문자 세트가 utf8
이면 한자 하나가 해당합니다. MySQL 튜토리얼의 중국어 데이터 문제바이트로.
utf8
입니다. 🎜🎜🎜참고 2: 문자 연결 레이어 세트는 🎜🎜🎜참고 MySQL 튜토리얼의 중국어 데이터 문제: 현재 데이터베이스의 문자 세트는 🎜🎜🎜참고 MySQL 튜토리얼의 중국어 데이터 문제: 서버 외부 처리를 위한 기본 문자 집합은 utf8
입니다.🎜🎜위 쿼리를 통해 다음을 찾을 수 있습니다. 🎜서버에 의한 외부 처리를 위한 기본 문자 집합 is utf8 code>🎜.🎜🎜그런 다음 클라이언트 속성을 통해 클라이언트가 지원하는 문자 집합을 확인합니다.🎜🎜<img src="https://img.php.cn/upload%20/article/000/000/020%20/6f99220cMySQL%20%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC%EC%9D%98%20%EC%A4%91%EA%B5%AD%EC%96%B4%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9CMySQL%20%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC%EC%9D%98%20%EC%A4%91%EA%B5%AD%EC%96%B4%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9Cb0c0b09ee2MySQL%20%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC%EC%9D%98%20%EC%A4%91%EA%B5%AD%EC%96%B4%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9C8d8820ff026-2.png" alt="MySQL 튜토리얼의 중국어 데이터 문제" title="">🎜🎜분명히 우리는 문제의 원인을 찾았습니다. 클라이언트는 <code>gbk
이고, 외부 처리를 위한 서버의 기본 문자 세트는 utf8
이므로 모순이 있습니다. 🎜🎜🎜문제가 발견되었으므로 해결책은 다음과 같습니다. 🎜서버에서 수신한 기본 문자 집합을 gbk
🎜로 수정합니다.🎜rrreee🎜이 경우 중국어 데이터를 삽입하면 삽입됩니다 성공! 그런데 데이터를 확인해 보니 또 다른 문제점이 발견되었습니다. 바로, 이전에 삽입했던 중국어 데이터가 왜곡되어 있다는 점이었습니다! 하지만 이는 정상적인 현상입니다. 쿼리할 때 데이터의 소스가 서버(utf8
)이고 클라이언트가 데이터를 구문 분석하며 클라이언트는 gbk
의 데이터만 인식하기 때문입니다. > 형식이 왜곡되어 표시될 것으로 예상됩니다! 🎜🎜그래서 해결책은 다음과 같습니다. 🎜서버에서 클라이언트에 제공하는 데이터 문자 집합을 gbk
🎜.🎜rrreee🎜🎜🎜위 사진처럼 서버에 중국어 데이터를 삽입하던 문제가 해결되었습니다! 🎜🎜또한 이전에 사용했던 SQL 문은 다음과 같습니다. 🎜rrreee🎜이 경우 클라이언트를 다시 시작할 때마다 순서대로 재설정해야 하는데 번거롭기 때문에 빠른 설정 방법을 사용할 수 있습니다. 🎜rrreee🎜예를 들어 🎜rrreee🎜는 위의 명령문이 세 변수의 값을 동시에 변경한다는 의미입니다. 그 중 connection
은 연결 레이어이며 client
및 results
의 문자 집합과 일치하는 경우 문자 집합 변환을 위한 중개자입니다. , 더 효율적일 것입니다. 높거나 일관성이 없는지는 중요하지 않습니다. 🎜🎜 🎜위 내용은 MySQL 튜토리얼의 중국어 데이터 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!