mysqlmysql 查询所有数据库查询问题

最近关于中文显示乱码的贴子比较多,所以也做了个总结:
可以参考一下杨涛涛版主的《各种乱码问题汇总》
MySQL字符集的原理介绍。摘录于官方文档。
不同的编码格式会导致同一字符,在不同字符集下的编码会不同。同样同一编码在不同的字符集中代码的字符也不相同。当你的MySQL返回的字符串的编码格式(字符集)与你的客户工具程序(mysql, php, query browser, ...)当前使用的字符集不同时,就会造成乱码。 比如一个英国朋友告诉你Long, 当一位中国小学生看到后就会告诉你&龙&而不是&长&
关于字符集的详细介绍和例子,建议花一点时间看一下&&&(第10章:字符集支持)。
这里仅摘要一下。
MySQL中默认字符集的设置有四级:服务器级,数据库级,表级&。最终是字段级&的字符集设置。注意前三种均为默认设置,并不代码你的字段最终会使用这个字符集设置。所以我们建议要用show create table table&; 或show full fields from tableN&来检查当前表中字段的字符集设置。
MySQL中关于连接环境的字符集设置有& Client端,connection, results 通过这些参数,MySQL就知道你的客户端工具用的是什么字符集,结果集应该是什么字符集。这样MySQL就会做必要的翻译,一旦这些参数有误,自然会导致字符串在转输过程中的转换错误。基本上99%的乱码由些造成。
乱码后需要检查的信息。(如果需要论坛上的朋友帮助,建议你提供以下信息&)
1. 数据库表中字段的字符集设置&。show create table TableName&或&show full columns from tableName
mysql&&show create table t1;+-------+------------------------------------| Table | Create Table&&&&&&&&&&&&&&&&&&&&&&&+-------+------------------------------------| t1&&& | CREATE TABLE `t1` (& `id` int(11) NOT NULL,& `c1` varchar(30) DEFAULT NULL,& PRIMARY KEY (`id`)&&&&) ENGINE=InnoDB DEFAULT CHARSET=gbk |+-------+------------------------------------1 row in set (0.00 sec)&&&&&&&&&&&&&&&&&&&&&&&&&mysql&&show full columns from t1;+-------+-------------+----------------+------+-----+-| Field | Type&&&&&&& | Collation&&&&& | Null | Key |&+-------+-------------+----------------+------+-----+-| id&&& | int(11)&&&& | NULL&&&&&&&&&& | NO&& | PRI |&| c1&&& | varchar(30) | gbk_chinese_ci | YES& |&&&& |&+-------+-------------+----------------+------+-----+-2 rows in set (0.00 sec)&mysql&
2. 当前联接系统参数&&show variables like 'char%'
mysql&&show variables like 'char%';+--------------------------+----------------| Variable_name&&&&&&&&&&& | Value+--------------------------+----------------| character_set_client&&&& | gbk| character_set_connection | gbk| character_set_database&& | latin1| character_set_filesystem | binary| character_set_results&&& | gbk| character_set_server&&&& | latin1| character_set_system&&&& | utf8| character_sets_dir&&&&&& | C:/Program File+--------------------------+----------------8 rows in set (0.00 sec)&mysql&
1. 中文,请确保 表中该字段的字符集为中文兼容:&&big5&&&& | Big5 Traditional Chinese&gb2312&& | GB2312 Simplified Chinese&gbk&&&&& | GBK Simplified Chinese&utf8&&&& | UTF-8 Unicode
2. 确保,联接参数与这个字段字符集一致,你可以用 set name 'charsetname';&&比如,&set name 'gbk';&这条命令会同时修改 character_set_client,character_set_connection,character_set_results&(如果你的这架MySQL中都为中文,则你可以在my.ini或my.cnf中加上或修改这个参数, 参数文件修改后需重启MySQL服务)[mysql]default-character-set=gbk
3. PHP 乱码,&同样 mysql_query("set name 'gbk'"); 其它API也类似。
4. phpmyadmin里乱码&phpMyAdmin的config.inc.php中有没有设置$cfg['DefaultCharset']='utf-8';
5. Windows操作系统中命令行("DOS"窗口)下。&&在你的DOS窗中的左上角标题栏片左键,属性,&在字体中,选择&宋体&,确认&mysql中 set names 'gbk';
6. ADO.NET, ADO中&,可以连接字符串中加入CharSet=UTF8;类似指令以说明connection的字符集。&Server=myServerADatabase=myDataBUid=myUPwd=myP CharSet=UTF8;
(utf8不行的话就换gbk试试)
C#往mysql中插入数据的时候,所有中文字符显示的都是?,但是从mysql数据库中读出来的数据都可以正常识别中文。用这个连接字符串server=database=uid=pwd=charset=gbk&
7. SQL Manager for MySQL
用EMS建数据库,
&Character Set设为utf-8
&client charset设UTF-8
&Font charset 设为GB2312_CHARSET
8. jdbcodbc桥接&
&&&&&&&//&Load the JDBC-ODBC bridge driver&&&&&&& Class.forName(sun.jdbc.odbc.JdbcOdbcDriver) ;&&&&&&&//&setup the properties&&&&&&& java.util.Properties prop&=&new&java.util.Properties();&&&&&& prop.put(&"&charSet&"&,&"&Big5&"&);&&&&&& prop.put(&"&user&"&, username);&&&&&& prop.put(&"&password&"&, password);&&&&&&&//&Connect to the database&&&&&&& con&=&DriverManager.getConnection(url, prop);
9.& PHP 5.2 版本以上解决乱码问题的一个方法&(由 ljf_ljf [Mark Liang] 提供)
&&&&$conn&=&mysql_connect&(&"&192.168.1.133&"&,&"&root&"&,&"&123456&"&) or&&&&&&&&die&(&"&Could not connect:&"&.&mysql_error&());&&&&$program_char&=&"&utf8&"&;&&&&$conn&.&mysql_select_db&(&"&test&"&);&&&&//&$conn.mysql_query('SET @@character_set_results = "'.$program_char.'"');&&&&&&&& mysql_set_charset(&$program_char&,&$conn&);&&&&&$charset&=&mysql_client_encoding&(&$conn&);&&&&printf&(&"&current character set is %s &br&&"&,&$charset&);&&&&$result&=&mysql_query&(&"&SELECT id, task_no,pack_path FROM tb_workplan where id = 1&"&,&$conn&);&&&&while&(&$row&=&mysql_fetch_array&(&$result&,&MYSQL_BOTH)) {&&&&&&&&printf&(&"&ID: %s &br& task_no: %s& &br& pack_path :%s &BR&&"&,&$row&[&"&id&"&]&,&$row&[&1&]&,&$row&[&"pack_path&"&]);&&&&& }&&&&$conn&.&mysql_free_result&(&$result&);&&&&$conn&.&mysql_close&();
9.& 存储过程参数乱码
create procedure t ( aa char(10) charset 'gbk')
阅读(...) 评论()问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
公司数据库查询需要多库下查询.SELECT * FROM h.h_sub WHERE 1mysql:提升
1146 - Table 'h.sub' doesn't exist
应该是数据配置问题,数据表是绝对存在的,入口换成select * from sub where是没有问题的
没这么深入了解mysql......................
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你问问题,如果想要别人给你答案,问题你要描述清楚,对于这个问题你要给出:数据库的名字,数据表的名字,把每一步的输出贴出来。执行命令: use xxx(database name);
你这样提问,别人是回答不了的。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这条语句在命名为h的库中的h_sub表里查询所有。你注意一下库名和表名是否都对。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
表到底是 h_sub 还是 sub ??
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:其他回答(3)
发的时候,是直接显示在界面上的,这个时候还没有存入数据库吧。写入估计有排队机制吧。
对于微博、评论这样的数据,对可用性要求不算太高的,可以选择采用Nosql来解决。
收获园豆:20
园豆:34787
园豆:34787
园豆:34787
园豆:34787
园豆:23730
园豆:34787
MySQL 有memory引擎,本来就可以对数据库非常快的写入,但是如何从内存数据库再持久化到数据库,就需要好好考虑下了。比如定期持久 还是 触发持久。这些就要看情况了。
收获园豆:20
园豆:14063
园豆:14063
园豆:14063
多台数据库服务器集群处理怎么样;数据量大的表水平分割到多个库
----------
微博等应该是读多写少,可以把热门条目放到高速缓冲中(内存)
楼主:看看这两篇文章对你有帮助没
/sCollege-365024.htm
q.com/cn/interviews/jf-taobao-database
收获园豆:30
&&&您需要以后才能回答,未注册用户请先。博客访问: 1855091
博文数量: 506
博客积分: 7081
博客等级: 少将
技术积分: 5379
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
数据库和表名在 Windows 中是大小写不敏感的 ,而在大多数类型的 Unix 系统中是大小写敏感的
Windows 版的 MySQL 默认继承 os 的大小写习惯,即使 SQL中有区分,在导入的时候都会被转为小写,如果今后再将此数据库导出就可能存在大小写的问题。my.ini 中有属性lower_case_table_names 可以更改此默认值,要严格区分大小写,将此项的置设置为2,再重启 MySQL 服务即可。
lower_case_table_names=2
然而,该查询在Windows中是可以的。要想避免出现差别,最好采用一致的转换,例如总是用小写创建并引用数据库名和表名。在大多数移植和使用中建议使用该转换。
在MySQL中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name系统变量确定,可以在启动mysqld&时设置。lower_case_tables_name可以采用下面的任一值:
使用CREATE TABLE或CREATE DATABASE语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。
表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为Windows和Mac OS X系统中的默认值。
表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。注释:&只&在对大小写不敏感的文件系统上适用! InnoDB表名以小写保存,例如lower_case_tables_name=1。
阅读(14616) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 mysql数据库常见问题 的文章

 

随机推荐