【问题标题】:Error Code: 1366 && 1300 - MySQL CHARACTER SET Issue错误代码:1366 && 1300 - MySQL CHARACTER SET 问题
【发布时间】:2018-08-31 20:51:50
【问题描述】:

我有两个字符集错误阻止我使用旧数据库的内容为我的数据库播种。

1.错误代码 1366:不正确的字符串值“\xDB”

我尝试将TABLECHARACTER SET 更改为utf8mb4

我研究了 \xDB 作为字符类型,并偶然发现了this。这让我相信这是一种 Javascript 转义格式。但是,我似乎找不到支持此功能的 MySQL CHARACTER SET

即使我确实找到了支持 Javascript 转义格式的CHARACTER SET,最好将所有内容都转换为更标准且包罗万象的utf8mb4?这将如何实现?

2。错误代码1300:无效的utf8mb4字符串

这是冒犯的字符:®

再一次,我尝试了上述类似的事情,但收效甚微。

编辑:

我在新数据库中设置CHARACTER SET如下:

CREATE TABLE `products` (
    `product_id` INT NOT NULL AUTO_INCREMENT UNIQUE,
    `product_line` VARCHAR(255) NOT NULL,
    `product_num` VARCHAR(255) NOT NULL,
    `description` LONGTEXT NOT NULL,
    PRIMARY KEY (`product_id`)
) CHARACTER SET utf8mb4 ;

编辑 2:

我不知道这有什么不同,但是在执行LOAD DATA INFILE 时出现了问题,如下所示:

USE `inventory`;

LOAD DATA INFILE
'all_products.csv'
INTO TABLE `products`
    FIELDS
        TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
    LINES
        TERMINATED BY ',\r\n'
IGNORE 1 ROWS
(`product_line`,`product_num`,`description`);

【问题讨论】:

标签: mysql sql character-encoding


【解决方案1】:

不要盲目做ALTER ... CONVERT TO ...;它可能会使事情变得更糟。如果您已经对已经不正确的情况进行了“更正”,那么我在下面给出的任何建议都不太可能解决您遇到的两个问题。

®DB 不相互映射。

DB,在各种字符集中表示:

                                    macce   2  1 'Ř'
                           cp1250, latin2   2  1 'Ű'
                           cp1257, latin7   2  1 'Ū'
                     dec8, latin1, latin5   2  1 'Û'
                                      hp8   2  1 'Ü'

同时,AE:

cp1250, cp1251, cp1256, cp1257, geostd8,
           hebrew, latin1, latin5, latin7   2  1 '®'
                                    macce   2  1 'ģ'
                                      hp8   2  1 'Û'
                                   latin2   2  1 'Ž'
                    cp850, cp852, keybcs2   2  1 '«'

通常的错误涉及在一个地方指定latin1,但在另一个地方指定utf8/utf8mb4

(为了便于讨论,utf8 和 utf8mb4 的作用相同。)

This 讨论典型问题。我担心要么是错误的更正使情况变得混乱,要么是单个字符不足以进行诊断。请参阅 this 了解可用的修复程序以及它们适用于哪些情况。

【讨论】:

  • 这为我提供了一个解决方案,为此我奖励你。 @Rick 是否有资源用于查找与其他字符代码对应的字符代码?我注意到我使用的两个代码都映射到latin1。因此,对于那些想知道this 问题的人,我意识到我需要在LOAD DATA INFILE 中设置character set
  • @Neil - 我在这里收集了 latin1:utf8 编码:mysql.rjweb.org/doc.php/charcoll#8_bit_encodings DB 和 AE 的映射列表来自一个特殊的脚本,该脚本通过 CONVERT(CONVERT(UNHEX('AE') USING ...) USING utf8mb4) 的字符集(加上一些漂亮的印刷品)。
【解决方案2】:

您是否尝试将排序规则更改为utf8_unicode_ci?此外,my.cnf 文件中有两个重要设置。它们是:

collation-server
character-set-server

另外,我完全同意@Rick 你应该避免ALTER ... CONVERT TO ...。插入前尝试执行:

SET NAMES utf8_unicode_ci

这有帮助吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2011-08-16
    相关资源
    最近更新 更多