- 浏览: 206093 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
Kesin97:
不错 很有用。选择性锁也不太影响性能。
sqlserver的updlock锁 (转) -
fox-idea:
学习
用PC作数据库服务器的容灾问题 -
xwei78:
话说这个下载地址不太好找啊,我去oracle网站转了好一会才找 ...
oracle10g官方客户端配置
PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(118N)。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。
现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的,在软件运行时根据当时的ocale/Lang/Codepage 设置确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换,甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。
数据库中的字符集编码问题
流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应
用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。
PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。
定位问题时常用的技巧
定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码,你可以发现什么时候中文字符被转换成 Unicode,什么时候Unicode 被转回中文内码,什么时候一个中文字成了两个 Unicode 字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了……
取用合适的样本字符串也有助于区分问题的类型。如:"aa啊 aa?@aa" 等中英相间,GB、GBK特征字符均有的字符串。一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度)。
解决各种应用的乱码问题
1) 使用 标签设置页面编码
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。
2) header("content-type:text/html; charset=xxx");
这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:
http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。
3) AddDefaultCharset
Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。
用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。
如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。
下面列出以上的优先顺序:
.. header("content-type:text/html; charset=xxx")
.. AddDefaultCharset xxx
..
如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。
4) php.ini 中的 default_charset 配置:
php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。
结束语
其实 php 开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 php 编程,中文信息处理中的问题还是会存在一段时间的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yefei679/archive/2008/11/22/3352386.aspx
发表评论
-
linux fsck命令参数及用法详解 转
2012-04-26 15:22 872命令 :fsck ... -
linux dd命令参数及用法详解 转
2012-04-26 15:21 1263linux dd 命令 使用详解 dd 的主 ... -
Linux TCP 连接数修改
2012-03-19 17:18 808一、 文件数限制修改 ... -
linux系统调优 转
2011-03-08 17:28 764大多数 Linux 发布版都定 ... -
Asterisk 源码 转
2010-11-01 22:21 1378在www.asterisk.org上可以获 ... -
asterisk视频 转
2010-10-27 10:51 914多人视频跟asterisk没多大关系,Asterisk 仅仅是 ... -
linux的strace命令(详解)
2010-10-20 10:13 685本文详细讲述linux下的st ... -
linux 守护进程 转
2010-10-08 10:52 734守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控 ... -
学习perl中的基础 转
2010-07-30 14:02 921先来一个例子吧 #!/usr/bin/perl use ... -
linux服务介绍
2010-07-24 09:40 795NetworkManager 0:off 1:off ... -
Linux快速入门之命令
2010-07-08 15:02 7381.# 表示权限用户(如:root),$ 表示普通用户 开机 ... -
Linux网络编程入门 --转
2010-06-01 10:53 1054(一)Linux网络编程--网络知识介绍 客户端和服务端 ... -
Windows下C语言网络编程快速入门(转)
2010-03-01 10:13 1300C语言的学习,一般的方式是,先学C,然后是C++,最好还 ... -
OSIP协议栈使用入门(续一:纯协议栈逻辑分析)(转)
2010-02-03 08:54 3794很长时间之前,简单 ... -
oSIP协议栈(及eXoSIP,Ortp等)使用入门(转)
2010-02-03 08:52 4322一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版 ... -
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
2009-12-21 22:23 5680VC9编译的程序在没有装过VC9(确切的说是.Net Fr ... -
soft phone develop
2009-12-20 11:01 981一 服务器端软件 1. Aste ... -
Asterisk内核框架
2009-12-16 16:31 1993Asterisk内核框架(转帖 ... -
vim简单配置 备忘
2009-12-09 12:57 7481 set nocompatible 2 set numb ... -
笔记uuu
2009-12-03 17:30 0一、最小化安装linux1.在 ...
相关推荐
查看mysql字符集MySQL 乱码的根源是的 MySQL 字符
通过上述步骤,你应该能够解决Red Hat Linux上的MySQL字符乱码问题。记住,处理字符集问题时一定要细心,因为不正确的设置可能导致数据丢失或乱码。在进行任何更改之前,最好备份重要的数据库和文件,以防万一。
### MySQL字符集乱码问题及解决方案 #### 一、问题背景 在使用MySQL数据库时,很多用户会遇到中文字符显示为乱码的情况。这通常是因为MySQL数据库中的字符集设置不一致导致的。例如,在命令行下操作MySQL时,可能会...
### MySQL字符集与乱码问题解析 在MySQL数据库管理中,字符集的配置与使用是十分重要的环节之一,尤其在处理多语言环境的数据时更是如此。如果字符集配置不当,很容易导致数据插入、查询过程中出现乱码问题。本文将...
docker mysql 字符集设置 使用 docker 启动 mysql 容器可能会出现中文乱码的情况,这里记录如何制作支持中文的 mysql 镜像 docker版本:18.06 mysql 版本:5.7 1. 创建 my.cnf 文件 [client] default-character-set=...
1. **字符集不一致**:如果Java程序、JDBC驱动、MySQL服务器以及数据库表的字符集设置不一致,就会导致中文乱码。例如,如果Java程序使用的是GBK编码,而MySQL服务器使用的是UTF-8编码,则会导致乱码。 2. **连接...
解决MySQL连接时中文显示乱码的问题,关键在于确保数据库、连接参数以及应用程序内部各环节的字符集设置保持一致,并采用适合中文字符的编码方式,如UTF-8。通过上述步骤,可以有效避免中文乱码现象,保证数据的正确...
### MySQL字符集的基本概念 字符集(Character Set)定义了数据在存储和处理时所采用的编码标准,而校对集(Collation)则规定了字符集下的排序规则和比较方式。在MySQL中,主要涉及以下几个关键变量: - `...
### 设定 MySQL 字符集解决终端乱码 在处理数据库操作时,经常遇到的一个问题是字符集编码不一致导致的数据乱码问题。对于 MySQL 数据库来说,合理设置字符集可以有效避免此类问题的发生。本文将详细介绍如何通过...
《MySQL字符集与乱码问题分析》一文深入探讨了字符编码的历史背景、技术细节以及在MySQL中的应用,尤其关注解决常见的乱码问题。本文将根据提供的内容摘要,详细阐述其中涉及的关键知识点。 ### 字符集背景知识 ##...
总之,解决MySQL中的汉字乱码问题需要从多个层面进行检查和调整,确保字符集在整个数据处理链路中的一致性。理解字符集和编码的概念,以及它们在MySQL中的应用,对于避免和解决这类问题至关重要。
#### 三、MySQL字符集详解 1. **MySQL 4.1之前的版本**: - 在MySQL 4.0及之前版本中,主要使用的是`latin1`字符集,这是一个单字节编码方案,仅支持西欧语言。 - 这种字符集对于中文等多字节编码的语言支持不佳...
### jsp+mysql中文乱码解决方案集合 在使用JSP结合MySQL进行Web应用开发时,中文乱码问题一直是困扰开发者的一大难题。本文将详细介绍如何在MySQL数据库层面解决中文乱码问题,并提供一系列实用的方法和技巧。 ###...
在使用Linux系统时,部分用户可能会遇到MySQL数据库无法正确显示或录入中文字符的问题,即所谓的“乱码”现象。这种问题不仅影响数据的准确性和完整性,还可能阻碍业务流程的正常运作。本文将详细介绍如何在Linux...
MySQL是世界上最流行的开源关系型数据库管理系统之一,但在处理数据时,有时可能会遇到字符编码问题,导致乱码。本文将深入探讨MySQL处理乱码的相关知识点,包括字符集的概念、乱码产生的原因、解决方法以及如何避免...
如果你遇到的问题是在MYSQL Query Browser或其他客户端工具中输入中文时出现乱码,或者导入包含中日文数据后显示乱码,那么可能需要调整这些字符集设置。 解决方法如下: 1. **修改MySQL配置文件**:在非安装版...
在MySQL中,如果表、列或连接客户端与服务器之间的字符集不一致,则可能会导致乱码现象。 #### 二、检查当前使用的字符集和排序规则 首先,需要确认当前MySQL系统正在使用的字符集和排序规则。可以通过执行以下SQL...
Mysql字符集编码详解 Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何...
MySQL 数据库字符乱码问题是数据库管理中常见的问题之一。造成乱码的原因多种多样,可能是由于数据库字符集的不正确设置、数据导入时的编码错误等。下面我们将详细讨论 MySQL 数据库乱码处理的方法。 1. 选择正确的...