Mariadb 数据库写入中文乱码问题

从其他表里面导入数据,出现中文乱码错误。之前操作时并没有碰到类似问题,有些不得其解。

在网上搜了下,最后参考这篇文章,在执行insert前,先执行 set names gbk; 然后成功插入。

链接:http://www.cnblogs.com/pricks/archive/2010/01/10/1643471.html

原文:

 MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。下面将分两部分,分别设置服务器编码和数据库、数据表与连接部分的编码,从而杜绝中文乱码的出现。

  一 服务器编码设置

  服务器编码设置方法有二:

  一是安装mysql时,其中会有一个步骤选择编码方式,此时选择gbk即可。如果不选择,默认的编码是latin1;

  二是在安装玩mysql之后,手动修改其配置文件,如下:

  (1)修改 MySql安装目录下面的my.ini(MySQL Server Instance Configuration 文件)。 设置

default-character-set=gbk(注意,有2处) 
  (2)修改data目录中相应数据库目录下的db.opt配置文件

default-character-set=gbk

default-collation=gbk_chinese_ci

  重启数据库,关闭控制台窗口重新登录数据库即可。

  二 数据库、数据表和连接部分的编码设置

  2.1 设置数据库和数据表编码

  要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码。如果没有指明,将是默认的latin1。
用得最多的应该是这3种字符集 gb2312,gbk,utf8。
  如何去指定数据库和数据表的字符集呢?下面也gbk为例:
  【在MySQL Command Line Client创建数据库 】
  mysql> CREATE TABLE `mysqlcode` (
  -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  -> `content` VARCHAR( 255 ) NOT NULL
  -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
  Query OK, 0 rows affected, 1 warning (0.03 sec)
  其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。
  当然也可以通过如下指令修改数据库数据表的字符集:
    alter database mysqlcode default character set ‘gbk‘.
  前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。

但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置

“连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作。如果不信

,你现在可以执行下面的sql文试一试:

  mysql> insert into mysqlcode values(null,‘java爱好者‘);
  按回车,结果如下:

  ERROR 1406 (22001): Data too long for column ‘content‘ at row 1

  

  2.2 设置连接编码

  设置了服务器、数据库和数据表部分的编码,必须设置连接编码。连接编码设置如下:

  mysql> SET character_set_client=‘gbk‘;
  mysql> SET character_set_connection=‘gbk‘
  mysql> SET character_set_results=‘gbk‘
  设置好连接编码,下面便可以成功插入中文了:

  mysql> insert into mysqlcode values(null,‘java爱好者‘);
  Query OK, 0 rows affected (0.02 sec)
  

  其实,上面设置连接编码的三条命令可以简化为一条:

  mysql> set names ‘gbk‘;

  

  设置好了连接编码后,在select查询时,也能正确显示中文:

  mysql> select * from mysqlcode;
  +----+-----------+
  | id | content |
  +----+-----------+
  | 1   | java爱好着 |
  +----+-----------+
  1 row in set (0.00 sec)

  三 完整示例

  下面将用一个例子完整地将上面的理论演示一遍,最后达到能向mysql中插入中文的目的:

  3.1 设置mysql服务器编码

  这一步请参见上文第一节,主要就是在安装mysql之后,修改my.ini和dataTable.db中的编码为gbk

  3.2 创建一个数据库

  先连接到本地数据库:mysql -h localhost -u root -proot,接着创建一个数据库:

  mysql> create database test;

  3.3 创建数据表并设置其编码

  -- 中文编码测试数据表

  use test
  DROP TABLE IF EXISTS `test`.`test_nml`;
  SET @saved_cs_client = @@character_set_client;
  SET character_set_client = gbk;
  CREATE TABLE  `test`.`test_nml` (
    `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `content` VARCHAR( 255 ) NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT=‘用户基本信息‘;
  SET character_set_client = @saved_cs_client;

  这里的红色部分等价于上文中的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

  3.4 插入中文数据

  --插入数据
  SET @saved_cs_client = @@character_set_client;
  set names gbk;
  insert into test_nml values(null,‘我是中文‘);

  

  注意:每次执行insert或update或select连接操作时,都必须设置编码,即在前面加上:set names ‘gbk‘;

时间: 2024-12-18 12:17:54

Mariadb 数据库写入中文乱码问题的相关文章

python向数据库插入中文乱码问题

这即将是一篇very short very short的博文,之所以发这篇博文主要是为了吐槽,表达我的气愤. 我靠,是个人都知道,编码问题遇上了是有多么恶心,就是很恶心很恶心很恶心就是了,对不对. 在python里,import MySQLdb后,向数据库插中文乱码的问题不是一次遇到. OK,就当我笨吧,我就是笨.曾几何时,python这边死皮赖脸地报错,曾几何时,sql那边雷打不动地显示乱码.姐能怎样,能怎样,还不是各种百度各种谷歌去撞.撞上了就撞上了,反正由于已经转晕了,也懒得记. 但是,今

在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码。

            在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码. 这个问题困惑了我很久,也走了很多弯路.经过不断的探究终于找到了问题的解决方案. 第一:查看自己的mysql的编码.cmd->mysql –uroot –p -->输入自己的mysql的密码->输入 SHOWVARIABLES LIKE 'character%';(如果装mysql时默认安装的话,会出现很多latin1,而不是我下面的全部utf-8,这是因为mysql默认的编码是lati

mysql写入中文乱码

乱码可谓是程序猿的常见问题了,下面就大致介绍几种常见的情况.常见于页面.前台到后台传值.写入到数据库这三个方面. 1.页面乱码 页面相对是最为容易解决的,往往是在相应的jsp页面或者html页面设置相关的字符集即可.如 <%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2.传值乱码 在传值过程中,也是乱码出现的频繁

mybatis连接mysql数据库插入中文乱码

对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集.我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???).重建库时选择字符集为UTF-8之后,中文正常显示了. 对于第二个问题,是这样 的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插

OPENDATASOURCE读取远程数据库数据中文乱码问题-sqlserver R2

insert into kraft_sync_Store(StoreName,StoreCode,Province,PrefectureCity,CountyCity,Region,Area,Unit,HQKA,KAName,StoreType,IsValid,ContactPerson,MobileTelephone,Telephone,Address,Latitude,Longitude,regiongroup,sfastoremanagername) Select CAST(storena

mysql数据库的中文乱码问题的解决

今天终于解决了数据库中文乱码的问题,分享出来让更多的人作为参考,我们进入主题: 如果在搭建mysql数据库的时候没有设置它的编码格式,在以后的开发中,中文乱码会是一个令人头疼的问题,所以我在这里分享一种彻底解决乱码的方法: 我是在ubuntu云服务器环境下进行的设置,Windows操作系统下操作更加简单,这里就不赘述,方法类似,大家自己可以查阅资料. 首先在命令行下输入: #cd /etc/mysql 进入目录后,然后修改my.cnf配置文件(mysql版本在5.5以上,现在基本都是这个以上)

python操作数据库产生中文乱码问题【已解决】

记:最近在使用python进行学生成绩管理系统设计时,遇到了一个中文显示的问题,这个问题困扰了一个上午,查阅了有关资料,锁定了原因——编码问题.最终更改编码设置,问题得到了解决. 具体做法: 1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)    2 MySQL数据库charset=utf-8     3 Python连接MySQL是加上参数 charset=utf8     4 设置Python的默认编码为 utf-8 (sys.setdefaulte

PL SQL 12.0.7的安装及注册码,汉化包,连接Oracle远程数据库,中文乱码问题处理

首先,在官网下载PL SQL 的对应版本,本机是64位的就下载64位的,网址:https://www.allroundautomations.com/downloads.html#PLS 点击应用程序.exe文件,进行安装. 安装成功,打开,会有一个需要注册的弹窗,输入以下注册码,仅针对PLSQL Developer 12.0.7版本, PLSQL Developer 12.0.7 注册码 product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le seri

PHP 读写数据库出现中文乱码问题

一.我在PHP读写数据库时,出现中文乱码问题的解决方案: 1.加入一句话就行了: mysql_query("set character set 'utf8'");//读库 mysql_query("set names 'utf8'");//写库 //其实读写都可以只加入 mysql_query("set names 'utf8'"); 如果使用mysqli的话,其实是一样的语句,但主要要注意的是一定不要把字符集写成UTF-8,在PHP语法中是没有