为什么mysql 默认的test数据库mysql characterr是latin1不是utf8

JSP使用UTF-8链接MYSQL数据库(UTF8)乱码以及连接失败问题以及更改mysql默认编码
JSP使用UTF-8链接MYSQL(UTF8)乱码以及连接失败问题:
前言,服了这些大公司,做的数据库都不人性化。。。我忙了很久才搞定的说
csdn好像传不了图片了。。。本来想来几张的,大家将就。。。
1.在windows下的数据库是utf8编码的时候,连接失败(注意mysql中不是UTF-8,而是utf8)
情况,显示?在网页上(网页设置的UTF-8编码)
用户ID号码
在数据库设定客户端的语言为GBK可以显示,猜测是内部采用utf8编码,设定之后会自定转换成为GBK编码:
mysql& set names gbk
Query OK, 0 rows affected (0.00 sec)
mysql& select *
+--------+-----------+--------------+------------+
| userid | username | userpassword | useradress |
+--------+-----------+--------------+------------+
| 1 | 我 | NULL | NULL |
| 2 | ?2 | 1243 | NULL |
| 3 | ??37fg459 | 1243 | NULL |
当然,用utf8编码的换,一定会乱码的,猜测是windows默认编码是GBK,所以utf是显示不了的。
mysql& set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql& select *
+--------+-----------+--------------+------------+
| userid | username | userpassword | useradress |
+--------+-----------+--------------+------------+
| 1 | 鎴? | NULL | NULL |
| 2 | ?2 | 1243 | NULL |
| 3 | ??37fg459 | 1243 | NULL |
| 4 | 澶? | 1243 | NULL |
下面说一下解决的方法:
2.第一步检查数据库的编码方式:
打开数据库的命令行,输入命令
--------------
D:\mysql_6.0\bin\mysql.exe Ver 14.15 Distrib 6.0.11-alpha, for Win64 (unknown)
Connection id: 72
Current database: contacts
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 6.0.11-alpha-community MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 9 hours 25 min 53 sec
Threads: 7 Questions: 749 Slow queries: 0 Opens: 23 Flush tables: 1 Open ta
bles: 2 Queries per second avg: 0.22
--------------
还有个命令也可以查看: show variables like &%char%&
mysql& show variables like &%char%&;
+--------------------------+------------------------------+
| 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_6.0\share\charsets\ |
+--------------------------+------------------------------+
8 rows in set (0.00 sec)
基本上编码做到楼主这个程度,可以确定数据库的默认编码没有问题了。
3.检查数据库的编码,输入命令:
show create database mydata,这里mydata指的是一个数据库的名称。
mysql& show cr
+----------+--------------------------------------------------------------------
--------------+
| Database | Create Database
+----------+--------------------------------------------------------------------
--------------+
| mydata | CREATE DATABASE `mydata` /*!40100 DEFAULT CHARACTER SET utf8 COLLAT
E utf8_bin */ |
+----------+--------------------------------------------------------------------
--------------+
1 row in set (0.00 sec)
4.检查数据库中表和列的编码,在选择一个数据库之后在命令行输入如下命令:
user在这里是一个表名字
+-------+-----------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------+
| Table | Create Table
+-------+-----------------------------------------------------------------------
--------------------------------------------------------------------------
-----------------+
| user | CREATE TABLE `user` (
`UserID` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_bin NOT NULL,
`userpassword` varchar(20) COLLATE utf8_bin NOT NULL,
`address` varchar(100) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`UserID`),
UNIQUE KEY `UserName` (`username`),
UNIQUE KEY `username_2` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+-----------------------------------------------------------------------
-------------------------------------------------------------------------------
-----------------+
1 row in set (0.00 sec)
之后检查,每一列后面的编码是不是utf8,同时看表格后边的charset=多少 ,collate后面指定的编码方式,指的是数据库搜索的时候使用的匹配编码规则。
做到3和4中的情况,基本可以确定数据库和表格中的编码是没有任何的问题了。其余的问题只能够处在中以及jsp和数据库的连接之中。
5.检查jsp中的代码是否全部是UTF-8的方式。
对于jsp页面本身:
&%@page contentType=&text/ charset=UTF-8 & pageEncoding=&UTF-8& %&
对于html页面本身:
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
jsp:request.setCharacterEncoding(&UTF-8&);
jsp:response.setCharacterEncoding(&UTF-8&);
做到如上,基本上jsp中的代码完全没有问题了,保证都是UTF-8.
6.检查连接过程是否出现问题,楼主就是这里出了问题,结果找了很久。。。
在jsp中链接数据库的时候:
Connection conn = DriverManager.getConnection(&jdbc:mysql://localhost/mydata?user=root&password=password1&useUnicode=true&characterEncoding=UTF-8&);
注:这里mydata是数据库名称
localhost是本机host
root是连接数据库的用户名
password1是连接数据库的密码
useUnicode=true&characterEncoding=UTF-8指定了连接使用的编码方式
楼主曾经也想过在连接没用 useUnicode=true&characterEncoding=UTF-8 的凡事,在连接之后 用set names utf8的方式,但是没有成功。
以上,问题完全解决了,以防万一,建议大家讲IDE的编码设置为UTF-8,什么eclipse myeclipse netbeanse 你懂的。。。。
7.在servl中的设置:
request.setCharacterEncoding(&UTF-8&);
response.setCharacterEncoding(&UTF-8&);
response.setContentType(&text/charset=UTF-8&);
MYSQL数据库已经其中的表和列如果一开始编码不是UTF-8,要设置成为UTF-8可以采用如下的方式。
注意:如果表中存在数据,有可能发生错误。
1.将数据库的编码改为UTF-8
Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8.
2.将表的编码改为UTF-8
Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8.
3.将表中字段(每一列)的编码改为UTF-8
Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8.
此命令在需要特殊编码的字段也可以指定此字段为特殊编码,如中文中一些符号utf8中没有,可以将某一字段设置为GBK,即可以存储此符号,但是记得存取数据的时候要转码
4.设置其他(默认)编码:
在mySQL安装目录,打开mysql.ini,将所有character后边的编码改成utf8,这样就改变的创建新数据库和表的时候的默认编码,MYSQL重启不失效。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码,_百度知道
mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入中文出现乱码,
用show variables like 'character%'显示都是utf8,具体说下怎么解决嘛,很急啊
我有更好的答案
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
|+--------------------------+---------------------------------+| character_set_client
|| character_set_connection | latin1
|| character_set_database
|| character_set_filesystem | binary
|| character_set_results
|| character_set_server
|| character_set_system
|| character_sets_dir
| D:&mysql-5.0.37&share&charsets& |+--------------------------+---------------------------------+mysql& SHOW VARIABLES LIKE 'collation_%';+----------------------+-----------------+| Variable_name
|+----------------------+-----------------+| 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
|+--------------------------+---------------------------------+| character_set_client
|| character_set_connection | utf8
|| character_set_database
|| character_set_filesystem | binary
|| character_set_results
|| character_set_server
|| character_set_system
|| character_sets_dir
| D:&mysql-5.0.37&share&charsets& |+--------------------------+---------------------------------+
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql& SET character_set_client = utf8 ;
mysql& SET character_set_connection = utf8 ;
mysql& SET character_set_database = utf8 ;
mysql& SET character_set_results = utf8 ;
mysql& SET character_set_server = utf8 ;
mysql& SET collation_connection = utf8 ;
mysql& SET collation_database = utf8 ;
mysql& SET collation_server = utf8 ;一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';它相当于下面的三句指令:SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;总结:因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.总结:你的字符集假如是gbk 就改gbk 这应该与你的web project中的所用的字符集一致 utf-8只是举例用的 要支持中文建议用gbk(繁简) gb2312(简)
采纳率:29%
重新配置下,选第二个“日本”的那个字符编码还有数据库连接的ur改下con=DriverManager.getConnection(&jdbc:mysql://localhost:3306/test?user=root&password=fang&useUnicode=true&characterEncoding=UTF-8&);后面的useUnicode=true&characterEncoding=UTF-8一定要加上再试试看咯!
本回答被提问者采纳
建数据库的时候选择正确的字符集,还有,程序里最好做必要的转码
因为utf8就是容易出现乱码。
其他1条回答
为您推荐:
其他类似问题
mysql数据库的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 mysql show character 的文章

 

随机推荐