1

我正在尝试将包含大量日文汉字字符的表从 SQLite 导入 MySQL。我尝试插入数据的表如下所示:

+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| literal      | char(10) | NO   | PRI | NULL    |       |
| grade        | int(11)  | YES  |     | NULL    |       |
| stroke_count | int(11)  | YES  |     | NULL    |       |
| freq         | int(11)  | YES  |     | NULL    |       |
| jlpt         | int(11)  | YES  |     | NULL    |       |

当我尝试

INSERT INTO main VALUES('',NULL,2,NULL,NULL);

我得到了下一个错误:

mysql>
ERROR 1062 (23000): Duplicate entry '?' for key 'PRIMARY'
And if try to look up that entry i get:

select * from main where literal = '';
+---------+-------+--------------+------+------+
| literal | grade | stroke_count | freq | jlpt |
+---------+-------+--------------+------+------+
|       |  NULL |            4 | NULL | NULL |
+---------+-------+--------------+------+------+
1 row in set (0.00 sec)

为什么查找''它显示为''?

我认为它可能与 UTF8 编码有关,所以我按照此链接的说明将所有 Db 和表重新配置为 utf8mb4 。

这是mysql的配置:

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

在那之后没有任何变化......有什么想法吗?

谢谢

此致

4

1 回答 1

2

根据排序规则,这两个字符可能被视为等效字符。您可以尝试另一种排序规则 - utf8mb4_bin,但是您必须注意将应用程序代码中的所有值都小写,以确保主键不区分大小写。

或者,您可以在此数据库中查找您在示例中提供的字符(我不能发布超过 2 个链接,抱歉): http ://codepoints.net/

它们的 UTF 代码点是:U+20089 U+2000B

在此处查看标准归类映射:http ://www.unicode.org/charts/uca/

我在任何 Unicode 归类映射中都找不到这两个字符,但是在许多情况下,拉丁字符带有变音符号(例如“Ç”和“C”),它们在 utf8 不区分大小写的归类映射中被定义为等效项。

于 2014-04-28T20:38:40.360 回答