1

我的环境

  • 系统:Windows 7 64 位
  • 数据库:MySQL 5.7.20 64 位
  • 地区:中文
  • cmd代码页:CP936

MySQL 设置

我的问题

在上述环境和数据库设置下,我尝试在创建的表cs_2中插入一条记录,但是失败了。

SQL 语句如下:

插入cs_2(方向)值('出');

结果是:

错误 1366 (HY000):不正确的字符串值:第 1 行的列 'direction' 的 '\xBA'

个人分析

在对mysql字符转换和Windows cmd输入转换进行了一些研究之后,我得到了以下指导:

  • 首先是我在cmd上输入字符串时的字符转换:

键盘输入 -> 输入法转换 -> 系统内部编码

在我的例子中,系统内部编码是'出' 的UTF-16 LE格式的字节流</p>

  • 二、是MySQL通信中根据系统变量的转换

系统内部编码 -> character_set_client -> character_set_connection -> 表的字符集

就我而言,这是

UTF-16 LE -> gbk -> gbk ->gbk

只有在系统内部编码和 character_set_client 之间的开始发生了转换。我认为转换是由系统本身执行的。

因此,在这种假设下,插入 SQL应该已经成功运行,但它失败了!我不知道为什么,我为这个问题苦苦挣扎了好几天,但我找不到解决方案。

如果有人碰巧遇到这个问题,请给我一些线索。非常感谢提前!

4

1 回答 1

0

在 mysql 中创建数据库或表时,您必须指定要以 utf-8 格式创建此表(如果您想使用中文字符集执行操作,则需要)
创建表(或者可能更好整个数据库)具有 utf8 格式的此类字符集:

将表格转换为 utf8:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

要将整个数据库转换为 utf8,请查看以下答案:
如何将整个 MySQL 数据库字符集和排序规则转换为 UTF-8?

要从头创建一个 utf8 数据库,请使用以下命令:

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

(来源https://dba.stackexchange.com/a/76789

这应该有望解决您的问题。

于 2018-01-25T09:59:55.507 回答