在 mysql 中存储汉字
Storing Chinese Characters in mysql
我正在尝试将中文字符存储到 mysql 数据库,但我做不到。
将 table 的字符集更改为 utf8 和 utf8mb4
Table 看起来像这样
id bigint(20) NO PRI auto_increment
version bigint(20) YES
country varchar(255) YES
englishName varchar(255) YES
chineseName varchar(255) YES
正在尝试使用以下查询将 chineseName 单元格更改为中文。
UPDATE nametable` SET `chineseName` = '上海' WHERE (`id` = '1');
依旧报错如下。
ERROR 1366: 1366: Incorrect string value: '\xE4\xB8\x8A\xE6\xB5\xB7...' for column 'code' at row 1
您在评论中回答说这是您更改字符集所做的:
ALTER TABLE nameTable CHARACTER SET = utf8mb4 , COLLATE = utf8mb4_bin
这只会更改 table 的默认字符集和排序规则。它不会更改现有列,它仅适用于您添加到 table.
的未来列
下面是 table 更改后的样子:
mysql> SHOW CREATE TABLE nameTable\G
CREATE TABLE `nameTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) DEFAULT NULL,
`country` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`englishName` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`chinesename` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
您可以看到 table 的默认值(在最后一行)已更改,但每一列仍然具有旧字符集。
您可以一一转换现有的列,或者您可以通过这种方式一次转换它们:
mysql> ALTER TABLE nameTable CONVERT TO CHARACTER SET utf8mb4, COLLATE utf8mb4_bin;
mysql> SHOW CREATE TABLE nameTable\G
CREATE TABLE `nameTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) DEFAULT NULL,
`country` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`englishName` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`chinesename` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
现在所有列都已转换。
MySQL 对于每列何时显示其字符集有一些奇怪的规则。参见
我正在尝试将中文字符存储到 mysql 数据库,但我做不到。
将 table 的字符集更改为 utf8 和 utf8mb4
Table 看起来像这样
id bigint(20) NO PRI auto_increment
version bigint(20) YES
country varchar(255) YES
englishName varchar(255) YES
chineseName varchar(255) YES
正在尝试使用以下查询将 chineseName 单元格更改为中文。
UPDATE nametable` SET `chineseName` = '上海' WHERE (`id` = '1');
依旧报错如下。
ERROR 1366: 1366: Incorrect string value: '\xE4\xB8\x8A\xE6\xB5\xB7...' for column 'code' at row 1
您在评论中回答说这是您更改字符集所做的:
ALTER TABLE nameTable CHARACTER SET = utf8mb4 , COLLATE = utf8mb4_bin
这只会更改 table 的默认字符集和排序规则。它不会更改现有列,它仅适用于您添加到 table.
的未来列下面是 table 更改后的样子:
mysql> SHOW CREATE TABLE nameTable\G
CREATE TABLE `nameTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) DEFAULT NULL,
`country` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`englishName` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`chinesename` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
您可以看到 table 的默认值(在最后一行)已更改,但每一列仍然具有旧字符集。
您可以一一转换现有的列,或者您可以通过这种方式一次转换它们:
mysql> ALTER TABLE nameTable CONVERT TO CHARACTER SET utf8mb4, COLLATE utf8mb4_bin;
mysql> SHOW CREATE TABLE nameTable\G
CREATE TABLE `nameTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) DEFAULT NULL,
`country` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`englishName` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`chinesename` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
现在所有列都已转换。
MySQL 对于每列何时显示其字符集有一些奇怪的规则。参见