澳门新萄京MYSQL创建数据库时候直接指定编码和排
分类:数据库

1.将mysql安装目录下的my.ini中的[client]项中添加default-character-set=gb2312 [client] default-character-set=gb2312 port=3306 2.将my.ini拷贝到c盘根目录,并修改名字为my.cnf 3.在配置odbc源时,选上Read Options From my.cnf这一项 MySQL ODBC字符集设置 mysql数据库字符集为utf8,使用delphi7的adoquery查询出的结果显示乱码 odbc驱动版本3.51.15 处理如下: --------------------- 修改%windir%my.ini 内容如下: [client] default-character-set=gbk 然后在配置ODBC驱动时选择advanced>flag3>read options from my.cnf 修改后问题解决

mysql中文乱码是php jsp初学者常碰到的事情,解决方法有很多,下面我们介绍一下在my.cnf中配置的方法

本文总结了一些关于修改MySQL数据库的字符集的方法以及在实际开发中出现字符集乱码时候的一些解决办法。

安装我 在网上搜索的结果
执行

问题现象:

Liunx下修改MySQL字符集:

代码:

当向mysql教程5.5插入中文时,会出现类似错误

1.查找MySQL的cnf文件的位置

sudo gedit /etc/mysql/my.cnf

ERROR 1366 (HY000): Incorrect string value: 'xD6xD0xCExC4' for column
问题原因:

find / -iname '*.cnf' -print

设置了默认编码为 UTF8

Db characterset的字符集设成了latin1

/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/texmf/web2c/texmf.cnf
/usr/share/texmf/web2c/mktex.cnf
/usr/share/texmf/web2c/fmtutil.cnf
/usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf
/usr/share/texmf/tex/jadetex/jadefmtutil.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf
/usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf

代码:

1、先确定数据里保存的是否是乱码:
mysql>select * from yourtable;
查看如果是乱码的话,就是你插入数据的时候,当前页面的编码方式和你mysql的编码方式不一致。
2、如果排除了以上乱码的可能,也就是说数据库教程中能正常保存中文,就需要检查你页面显示的编码方式了

  1. 拷贝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf其中的一个到/etc下,命名为my.cnf

[client]
port            = 3306
socket            = /var/run/mysqld/mysqld.sock
#默认字符集为utf8
default-character-set = utf8

解决方案:

cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

代码:

澳门新萄京MYSQL创建数据库时候直接指定编码和排序规则,关于修改mysql数据库字符集的方法。找到MYSQL安装目录下的my.ini文件修改:

  1. 修改my.cnf

[mysqld]
#
# * Basic Settings
#
# 默认字符集为utf8
default-character-set = utf8

[client]

vi /etc/my.cnf

重启MySql

port=3306

在[client]下添加

但是我用 执行

[mysql]

default-character-set=utf8

代码:

default-character-set=gbk

在[mysqld]下添加

show variables like 'character%';

# SERVER SECTION

default-character-set=utf8

结果

#

#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"

#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=gbk

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB

参考my.cnf

修改mysql的默认字符集是通过修改它的配置文件来实现的

windows下的mysql配置文件是my.ini,一般在安装目录下(如C:Program FilesMySQLMySQL Server 5.0),可以直接在这个文件里面加上 

default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql 

 查看 MySQL 数据库服务器字符集,数据库字符集和客户端字符集 

show variables like '%char%'; 

character_set_client,客户端字符集 

character_set_database,数据库字符集 

character_set_server,服务器字符集 

  1. 查看 MySQL 数据表(table) 的字符集 

show table status from tablename like '%countries%'; 

  1. 查看 MySQL 数据列(column)的字符集。 

show full columns from tablename; 

  1. 查看当前安装的 MySQL 所支持的字符集。 

show char set;

jsp初学者常碰到的事情,解决方法有很多,下面我们介绍一下在my.cnf中配置的方法 问题现象: 当向mysql教程5.5插入中文时...

4.重新启动MySQL

代码:

[[email protected] ~]# /etc/rc.d/init.d/mysql restart
Shutting down MySQL                                         [ 确定 ]
Starting MySQL.                                             [ 确定 ]
[[email protected] ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL)
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

-------------------------- ----------------------------
| Variable_name            | Value                      |
-------------------------- ----------------------------
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
-------------------------- ----------------------------

5.查看字符集设置

其中

mysql> show variables like 'collation_%';
---------------------- -----------------
| Variable_name         | Value            |
---------------------- -----------------
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
---------------------- -----------------
3 rows in set (0.02 sec)
mysql> show variables like 'character_set_%';
-------------------------- ----------------------------
| Variable_name             | Value                       |
-------------------------- ----------------------------
| character_set_client      | utf8                        |
| character_set_connection | utf8                        |
| character_set_database    | utf8                        |
| character_set_filesystem | binary                      |
| character_set_results     | utf8                        |
| character_set_server      | utf8                        |
| character_set_system      | utf8                        |
| character_sets_dir        | /usr/share/mysql/charsets/ |
-------------------------- ----------------------------
8 rows in set (0.02 sec)

代码:

其他的一些设置方法:

| character_set_database | latin1                     |

修改数据库的字符集

为什么没有变化

mysql>use mydb

而且java无法插入中文 java中已经将中文用utf8转码

mysql>alter database mydb character set utf-8;

在mysql中默认字符集是latin1,
想要设置字符集为uft-8,可以在 my.cnf 文件中添加以下设置:
·[client]
default-character-set=utf8
·[mysqld]
default-character-set=utf8
skip-character-set-client-handshake #此处是忽略客户端的字符集,使用服务器的设置
(skip语句和client中的default选一个)
当然你可以在建立数据库是规定字符集:
create database db_name default character set utf8 callate utf8-general-ci;
也可以在链接数据库前设置:set names 'utf8';

创建数据库指定数据库的字符集

重点在红字上,加了skip-character-set-client-handshake,client里面就不用加default了
show variables like 'characte%';
-------------------------- ----------------------------
| Variable_name | Value |
-------------------------- ----------------------------
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
-------------------------- ----------------------------

mysql>create database mydb character set utf-8;

_________________

通过配置文件修改:

笔记

mysql 创建 数据库时指定编码很重要,很多开发者都使用了默认编码,但是我使用的经验来看,制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。

我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来
很多mysql数据库工具(除了phpmyadmin,我偶尔用,功能强速度慢)都不支持创建时指定数据库编码,当然可以改my.ini来解决这个问题,但是需要重新启动mysql,不过用下面的语句会更有效

GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

注意:如果不是通过my.ini配置文件设置的内容,只在当前状态下有效,当重启数据库服务后失效。所以如果想要不出现乱码只有修改my.ini文件,数据库编码可以在创建数据库时候指定UTF8,如下:
|character_set_client      | utf8                                  |
| character_set_connection | utf8                                  |
| character_set_database   | utf8                                  |
| character_set_filesystem | binary                                |
| character_set_results    | utf8                                  |
| character_set_server     | latin1                                |
| character_set_system     | utf8          

注意该配置| character_set_server     | latin1 无法设置成UTF8
交互时候仍然会出现乱码。

只有当修改my.ini中设置UTF8,才会全部修改成UTF8


mysql设置编码命令

SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;/*这里要注意很有用*/
SET character_set_server = utf8;

SET collation_connection = utf8_bin;
SET collation_database = utf8_bin;
SET collation_server = utf8_bin;

my.ini中配置默认编码
default-character-set=utf8

连接数据库设置编码
jdbc:mysql://192.168.0.5:3306/test?characterEncoding=utf8

/*****************************************java与mysq编码对应****************************************/
java中的常用编码UTF-8;GBK;GB2312;ISO-8859-1;
对应mysql数据库中的编码utf8;gbk;gb2312;latin1


数据库连接串中指定字符集URL=jdbc:mysql://yourIP/college?user=root&password=yourPassword&useUnicode=true&characterEncoding=gbk

转载地址:

修改/var/lib/mysql/mydb/db.opt

default-character-set=latin1

default-collation=latin1_swedish_ci

澳门新萄京,为

default-character-set=utf8

default-collation=utf8_general_ci

重起MySQL:

[[email protected] ~]# /etc/rc.d/init.d/mysql restart

通过MySQL命令行修改:

mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)

查看:

mysql> show variables like 'character_set_%';
-------------------------- ----------------------------
| Variable_name             | Value                       |
-------------------------- ----------------------------
| character_set_client      | utf8                        |
| character_set_connection | utf8                        |
| character_set_database    | utf8                        |
| character_set_filesystem | binary                      |
| character_set_results     | utf8                        |
| character_set_server      | utf8                        |
| character_set_system      | utf8                        |
| character_sets_dir        | /usr/share/mysql/charsets/ |
-------------------------- ----------------------------
8 rows in set (0.03 sec)

mysql> show variables like 'collation_%';
---------------------- -----------------
| Variable_name         | Value            |
---------------------- -----------------
| collation_connection | utf8_general_ci |
| collation_database    | utf8_general_ci |
| collation_server      | utf8_general_ci |
---------------------- -----------------
3 rows in set (0.04 sec)


【知识性文章转载】

MYSQL 字符集问题

MySQL的字符集支持(Character Set Support)有两个方面:

字符集(Character set)和排序方式(Collation)。

对于字符集的支持细化到四个层次:

服务器(server),数据库(database),数据表(table)和连接(connection)。

1.MySQL默认字符集

MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;

(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;

(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;

(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;

(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;

(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;

(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。

2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1),通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character%';

-------------------------- ----------------------------------
| Variable_name            | Value                            |
-------------------------- ----------------------------------
| character_set_client     | latin1                           |
| character_set_connection | latin1                           |
| character_set_database   | latin1                           |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                           |
| character_set_server     | latin1                           |
| character_set_system     | utf8                             |
| character_sets_dir       | D:"mysql-5.0.37"share"charsets"  |
-------------------------- ----------------------------------

mysql> SHOW VARIABLES LIKE 'collation_%';

---------------------- ------------------
| Variable_name        | Value            |
---------------------- ------------------
| collation_connection | utf8_general_ci  |
| collation_database   | utf8_general_ci  |
| collation_server     | utf8_general_ci  |
---------------------- ------------------

3.修改默认字符集

(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,如

default-character-set = utf8
character_set_server = utf8

修改完后,重启mysql的服务,service mysql restart

使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8

-------------------------- ---------------------------------
| Variable_name            | Value                           |
-------------------------- ---------------------------------
| character_set_client     | utf8                            |
| character_set_connection | utf8                            |
| character_set_database   | utf8                            |
| character_set_filesystem | binary                          |
| character_set_results    | utf8                            |
| character_set_server     | utf8                            |
| character_set_system     | utf8                            |
| character_sets_dir       | D:"mysql-5.0.37"share"charsets" |
-------------------------- ---------------------------------

(2) 还有一种修改字符集的方法,就是使用mysql的命令

mysql> SET character_set_client = utf8 ;
 
MySQL中涉及的几个字符集
 
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。
character-set-database:数据库字符集。
character-set-table:数据库表字符集。
优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。
character-set-client:客户端的字符集。客户端默认字符集。当客户端向服务器发送请求时,请求以该字符集进行编码。
character-set-results:结果字符集。服务器向客户端返回结果或者信息时,结果以该字符集进行编码。
在客户端,如果没有定义character-set-results,则采用character-set-client字符集作为默认的字符集。所以只需要设置character-set-client字符集。
 
要处理中文,则可以将character-set-server和character-set-client均设置为GB2312,如果要同时处理多国语言,则设置为UTF8。
 
关于MySQL的中文问题
 
解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集。

character_set_client:客户端的字符集。
character_set_results:结果字符集。
character_set_connection:连接字符集。

设置这三个系统参数通过向MySQL发送语句:set names gb2312
 
关于GBK、GB2312、UTF8

UTF- 8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
 
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
 
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312
 
对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。
 
GB2312是GBK的子集,GBK是GB18030的子集;GBK是包括中日韩字符的大字符集合。

如果是中文的网站 推荐GB2312 GBK有时还是有点问题,为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便。

UTF-8可以看作是大字符集,它包含了大部分文字的编码。使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。
 
gb2312是简体中文的码

gbk支持简体中文及繁体中文

big5支持繁体中文

utf-8支持几乎所有字符
 
首先分析乱码的情况

1.写入数据库时作为乱码写入

2.查询结果以乱码返回

究竟在发生乱码时是哪一种情况呢?

我们先在mysql 命令行下输入

show variables like '%char%';

查看mysql 字符集设置情况:
 
mysql> show variables like '%char%';
-------------------------- ----------------------------------------
| Variable_name            | Value                                  |
-------------------------- ----------------------------------------
| character_set_client     | gbk                                    |
| character_set_connection | gbk                                    |
| character_set_database   | gbk                                    |
| character_set_filesystem | binary                                 |
| character_set_results    | gbk                                    |
| character_set_server     | gbk                                    |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
-------------------------- ----------------------------------------
 
在查询结果中可以看到mysql 数据库系统中客户端、数据库连接、数据库、文件系统、查询结果、服务器、系统的字符集设置在这里,文件系统字符集是固定的,系统、服务器的字符集在安装时确定,与乱码问题无关乱码的问题与客户端、数据库连接、数据库、查询结果的字符集设置有关。

(*注:客户端是看访问mysql数据库的方式,通过命令行访问,命令行窗口就是客户端,通过JDBC等连接访问,程序就是客户端,我们在向mysql写入中文数据时,在客户端、数据库连接、写入数据库时分别要进行编码转换,在执行查询时,在返回结果、数据库连接、客户端分别进行编码转换。)

现在我们应该清楚,乱码发生在数据库、客户端、查询结果以及数据库连接这其中一个或多个环节。

接下来我们来说下如何解决这个问题。

在登录数据库时,我们用 mysql --default-character-set=字符集-u root -p 进行连接,这时我们再用

show variables like '%char%';

命令查看字符集设置情况,可以发现客户端、数据库连接、查询结果的字符集已经设置成登录时选择的字符集了。

如果是已经登录了,可以使用:

set names 字符集;

命令来实现上述效果,等同于下面的命令:

set character_set_client = 字符集

set character_set_connection = 字符集

set character_set_results = 字符集
 
如果碰到上述命令无效时,也可采用一种最简单最彻底的方法:
 
一、Windows
 
1、中止MySQL服务

2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可

3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭

4、启动MySQL服务
 
要彻底解决编码问题,必须使
 
| character_set_client     | gbk                                    |
| character_set_connection | gbk                                    |
| character_set_database   | gbk                                    |
| character_set_results    | gbk                                    |
| character_set_server     | gbk                                    |
| character_set_system     | utf8    
 
这些编码相一致,都统一。

您可能感兴趣的文章

  • 如何查看MySQL数据库字符集
  • 总结MySQL数据库服务器逐渐变慢的原因和解决办法
  • 合理使用MySQL数据库索引以使数据库高效运行
  • 如何定位,排除和避免MySQL数据库性能问题
  • 忘记PHPnow的MySQL数据库密码的解决办法
  • mysql服务器主从数据库同步配置
  • Mysql 数据库缓存cache功能分析,调试以及性能总结
  • 关于mysql数据库大小写敏感的问题

Liunx下修改MySQL字符集 : 1.查...

本文由澳门新萄京发布于数据库,转载请注明出处:澳门新萄京MYSQL创建数据库时候直接指定编码和排

上一篇:学业疏解和复习,MySQL查询语句实操练习 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 澳门新萄京:MySQL配置文件详解,innodb重要参数
    澳门新萄京:MySQL配置文件详解,innodb重要参数
    1. innodb_lock_wait_timeout 官方网址说:从5.7.18发端不在二进制包中提供my-default.cnf文件。参谋:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html I assume the MyS
  • 澳门新萄京ProxySQL初体验
    澳门新萄京ProxySQL初体验
      Preface       Aswe all know,it's a common sense that separate reading and writingoperations can immensely increse the performance of MySQLdatabase.Especially the query operations by executing sel
  • 行使SqlServer中的float类型时意识的标题,及应用思
    行使SqlServer中的float类型时意识的标题,及应用思
      摘要: 下文陈述使用roundsql函数,对数值型数据开展舍入操作 实施意况:sqlserver 二零一零 numeric 和 decimal 数据类型的默认最大精度值是 38。在 Transact-SQL 中,
  • SQL函数大全,常用系统函数
    SQL函数大全,常用系统函数
    摘要:下文收集了sqlserver函数教程,为每一个函数都进行了相关举例说明, 系统函数用于获取有关计算机系统、用户、数据库和数据库对象的信息。系统函
  • SQL内外左右交叉连接,交叉连接
    SQL内外左右交叉连接,交叉连接
    在查询多少个表时,大家平常会用“连接查询”。连接是关周全据库模型的首要特色,也是它有别于于其余种类数据库管理种类的一个注脚。   SQL左右连接