导入到mysql时utf8出现乱码

han*_*ros 24 mysql utf-8

将UTF8编码的数据导入mysql对我来说不起作用.UTF8字符已损坏.例如,Nöthnagel显示为NÃthnagel

我创建了一个sql转储文件来进行包含UTF-8编码数据的导入.例如:

INSERT INTO `users` VALUES(1, 'Fred','Nöthnagel');
Run Code Online (Sandbox Code Playgroud)

表示文件中ö的字节序列是c3 b6,我认为是正确的,因为它在vim和我的bash shell中正确显示,其中设置了以下环境变量:

$ env | grep -i utf
LANG=en_US.UTF-8
XTERM_LOCALE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

mysql数据库创建如下:

mysql> CREATE DATABASE mydb CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)

mysql表创建如下:

CREATE TABLE `users` (  
    `id` int(11) NOT NULL AUTO_INCREMENT,  
    `first_name` varchar(30) NOT NULL,  
    `last_name` varchar(30) NOT NULL,
    PRIMARY KEY (`id`),  
    UNIQUE KEY `last_name` (`last_name`)  
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  
Run Code Online (Sandbox Code Playgroud)

我正在导入转储文件,如下所示:

 mysql -u root -psecret mydb < mydump.sql
Run Code Online (Sandbox Code Playgroud)

请告诉我上面缺少什么.

Les*_*ess 56

我认为这也可能与整理有关,但我不确定.在我的情况下它确实如此,因为我必须支持西里尔文.
试试这个,为我工作:

  1. 在创建目标数据库时设置初始排序规则 utf8_general_ci

  2. 添加SET NAMES 'utf8' COLLATE 'utf8_general_ci';到sql文件的顶部

  3. mysql -u root -p --default-character-set=utf8 yourDB < yourSQLfile.sql

还有一件事,为了从数据库中正确获取UTF-8数据,您还必须修改连接字符串.例如:

mysql.url=jdbc:mysql://localhost:3306/nbs?useJvmCharsetConverters=false&useDynamicCharsetInfo=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&useEncoding=true

另外,看看我的问题是什么.


han*_*ros 12

通过在sql文件的顶部添加这个问题解决了这个问题:

SET NAMES utf8;
Run Code Online (Sandbox Code Playgroud)


Ali*_*iSh 10

使用此命令将utf8表导入数据库:

mysql -u USERNAME  -pPASSWORD --default_character_set utf8  DATABASE < file.sql
Run Code Online (Sandbox Code Playgroud)