MySQL 4.1的编码问题

 更新时间:2016年11月25日 16:41  点击:1947
下面要写的是一篇非常无聊的东西,充斥了大量各式各样的编码、转换、客户端、服务器端、连接……呃,我自己都不愿意去看它,但想一想,写下来还是有点意义的,原因有四:

    MySQL 4.1 对多语言的支持有了很大变化 (这导致了问题的出现);
    尽管大部分的地方 (包括个人使用和主机提供商),MySQL 3 仍然占主导地位;但 MySQL 4.1 是 MySQL 官方推荐的数据库,已经有主机提供商开始提供并将会越来越多;
    许多 PHP 程序以 MySQL 作为默认的数据库管理软件,但它们一般不区分 MySQL 4.1 与 4.1 以下版本的区别,笼统地称“MySQL 3.xx.xx 以上版本”就满足安装需求了;
    因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题;

简单的说,MySQL 自身的变化和使用 MySQL 的 PHP 程序对此忽略,导致了问题的出现和复杂化,而由于大部分用户使用的是英文,使这种问题不被重视。这里提到的 PHP 程序,主要就 WordPress 而言。

MySQL 4.1 字符集支持的原理


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

    编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
    安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
    启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
    此时
     
    为了更好地推动SOA发展,BEA等数家正在合作创建服务组件架构(SCA)和服务数据对象(SDO)规范的领先技术厂商日前发布了多个重要成果,包括与SOA相关的规范和技术所取得的重要发展。这些合作厂商联盟还创建了独立于厂商的网站(www.OSOA.org),用于提供相关信息,包括规范草案、白皮书等,为业界提供一个能深入交流、集思广益的论坛。
      早在2005年11月,为了简化SOA应用,BEA、IBM、IONA、Oracle、SAP AG、Sybase、Xcalia和Zend等公司联合发布了新的行业规范。此后,又有多家公司加盟到这一合作阵营当中,包括Cape Clear、Interface21、Primeton Technologies、Progress Software (前身为Sonic Software)、Red Hat、 Rogue Wave Software、Software AG、Sun Microsystems和TIBCO软件有限公司,这17家公司涵盖了SOA和应用厂商以及基础架构和开源提供商。他们的合作推动SCA和SDO技术实现了长足的发展,包括制定新的和修改规范草案。SCA规范旨在简化业务服务的构建和组装,SDO规范旨在以统一的方式访问不同数据源类型。
      根据Gartner在2006年3月公布的“SCA:寻求建立SOA通用注释的优胜者”报告,Gartner副总裁Jess Thompson指出:“SCA最重要的层面之一,是建立了一个标准化注释的基础,从而可以基于标准,规范表述面向服务的架构(SOA)。”
      经过努力,合作联盟获得了系列新的进展,比如编写了全新的用于声明策略框架的SCA规范草案;改进了JMS、JCA和Web服务绑定规范连接描述、新的BPEL和PHP创建模型。此外,还有服务组合的规范草案、Java和C++服务创建、以及更新了SDO规范。
      SCA和SDO规范能够帮助企业更轻松地创建新IT资产以及改造现有的IT资产,使IT资产成为能够快速组装的可重用服务以满足不断变化的业务需求。这些规范对任何的编程语言和部署平台都提供统一服务的方式,从而能够大幅度减少与开发应用相关的复杂性。这两种新涌现的技术旨在简化业务逻辑和业务数据的表示方式。更多信息请访问www.osoa.org.     

     
          数据表都已经创建起来了,假设我们已经插入了许多的数据,我们就可以用自己喜欢的方式对数据表里面的信息进行检索和显示了,比如说:可以象下面这样把整个数据表内的内容都显示出来
                select * from president;
          也可以只选取某一个数据行里的某一个数据列
                select birth from president where last_name=’Eisenhower’;
          select语句的通用形式如下:
                select 你要的信息
                from 数据表(一个或多个)
                where 满足的条件
          select语句有几个子句,他们的各种搭配能帮你查出最感兴趣的信息,这些子句可以很简单,也可以很复杂,看看作者是如何详细讲解的
    1,            用各种操作符来设定检索条件
          要想让select语句只把满足特定条件的记录检索出来,就必须给它加上where字句来设置数据行的检索条件。只有这样,才能有选择地把数据列的取值满足特定要求的那些数据行挑选出来。可以针对任何类型的值进行查找,比如说,对数值进行搜索
    select * from score where score>95; //显示所有分数在95分以上的信息
          也可以针对字符串值进行查找
    select last_name,first_name from president where last_name=’Tom’; //找出所有姓tom的总统
          还可以对不同类型的值进行组合查找
    select last_name,first_name,birth,state from president
    where birth<’1950-1-1’ and (state=’VA’ or state=’BA’);
          //找出1950年前出生于VA州或BA州的总统
          可见 where子句中可以使用的是算术操作符(+-*/%),比较操作符(<>=)以及逻辑运算符,我们应该熟练理解这些操作符的含义(都很简单)
    /*
    'bcp' 不是内部或外部命令,也不是可运行的程序?
    看看在C:Program FilesMicrosoft SQL Server80ToolsBinn里面有没有bcp.exe这个文件
    然后看看path里面加C:Program FilesMicrosoft SQL Server80ToolsBinn这个目录没有.
    右键我的电脑--属性--高级--环境变量--在系统变量中找到path--编辑
    在变量值的最后加上:
    C:Program FilesMicrosoft SQL Server80ToolsBINN
    */
    /**********************************************************************
    存储过程: P_SaveXML
    功能: 生成XML文件
    参数: 表名
    返回: 指定目录的XML文件
    调用方法: 传递中间表TB_TABLECOLUMN_T存在的表名
    exec P_ZehuaSavexml 'WQ_STINFO_B,WQ_PHY_D','D:xx.xml'
    最后更改日期: 2005-8-17
    联系方式: zlp@zehua.com.cn
    备注: 根据中间表生成符合标准格式的XML文件
    www.111cn.net
    **********************************************************************/
    /*
    exec P_ZehuaSavexml 'WQ_STINFO_B,WQ_PHY_D','D:xx.xml'
    */
    go
    create proc P_ZehuaSavexml
    @TableCodeS varchar(8000),
    @fname varchar(1000)='c: mp.xml' --默认保存的XML文件地址
    as
    declare @sql nvarchar(200),@sql1 varchar(400)
    declare @cnt int,@Table_Name varchar(20)
    declare @i int,@TableCode varchar(20)
    declare @err int,@src varchar(255),@desc varchar(255)
    create table ##t(re nvarchar(4000))
    insert ##t
    select Re='<?xml version="1.0" encoding="gb2312"?>'
    union all select '<ZehuaTableInfoXml>'
    set @i=charindex(',',@TableCodeS)
    while @i>0
    begin
    set @TableCode=left(@TableCodeS,@i-1)
    set @sql=''
    set @sql=N'select @cnt=count(*),@Table_Name=max(Table_Name) from '
    set @sql=@sql N'('
    set @sql=@sql N'select top 100 percent * from TB_TABLECOLUMN_T where '
    set @sql=@sql N'TABLE_CODE=''' @TableCode ''' and COLUMNS_ISKEY=''√'' '
    set @sql=@sql N'order by COLUMNS_SORT '
    set @sql=@sql N')'
    安装篇
    PHP MySQL Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考。
    1、下载mysql-3.23.35-win.zip并解压;
    2、运行setup.exe;选择d:mysql,"tyical install"
    3、启动mysql,有如下方法:
    方法一:使用winmysqladmin
    1)、进入d::mysqlin目录,运行winmysqladmin.exe,在屏幕右下角的任务栏内会有一个带红色的图符
    2)、鼠标左键点击该图符,选择“show me”,出现“WinMySQLAdmin”操作界面;首次运行时会中间会出现一个对话框要求输入并设置你的用户名和口令
    3)、选择“My.INI setup”
    4)、在“mysqld file”中选择“mysqld-opt”(win9x)或“mysqld-nt”(winNT)
    5)、选择“Pick-up or Edit my.ini values”可以在右边窗口内对你的my.ini文件进行编辑
    6)、选择“Save Modification”保存你的my.ini文件
    7)、如果你想快速使用winmysqladmin(开机时自动运行),选择“Create ShortCut on Start Menu”
    8)、测试:
    进入DOS界面;
    在d:mysqlin目录下运行mysql,进入mysql交互操作界面
    输入show databases并回车,屏幕显示出当前已有的两个数据库mysql和test

    方法二:不使用winmysqladmin
    1)、在DOS窗口下,进入d:/mysql/bin目录
    2)、win9X下)运行:
    mysqld
    在NT下运行:
    mysqld-nt --standalone
    3)、此后,mysql在后台运行
    4)、测试mysql:(在d:/mysql/bin目录下)
    a)、mysqlshow
    正常时显示已有的两个数据库mysql和test
    b)、mysqlshow -u root mysql
    正常时显示数据库mysql里的五个表:
    columns_priv
    db
    host
    tables_priv
    user
    c)、mysqladmin version status proc
    显示版本号、状态、进程信息等
    d)、mysql test
    进入mysql操作界面,当前数据库为test
    5)、mysql关闭方法:
    mysqladmin -u root shutdown
    4、至此,MySQL已成功安装,接着可以熟悉MySQL的常用命令并创建自己的数据库了。

[!--infotagslink--]

相关文章

  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • PHP传值到不同页面的三种常见方式及php和html之间传值问题

    在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • js修改input的type属性问题探讨

    js修改input的type属性有些限制。当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。...2013-10-19
  • Mysql常见问题集锦

    1,utf8_bin跟utf8_general_ci的区别 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a'...2013-10-04
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • Mysql大小写敏感的问题

    一、1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的:复制代码 代码如下: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WH...2015-03-15
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
  • 忘记MYSQL密码的6种常用解决方法总结

    首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
  • MySQL数据库备份还原方法

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
  • Mysql命令大全(详细篇)

    一、连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql/bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密...2015-11-08
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • Navicat for MySQL 11注册码\激活码汇总

    Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下...2020-11-23
  • mysql IS NULL使用索引案例讲解

    这篇文章主要介绍了mysql IS NULL使用索引案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-14
  • 基于PostgreSQL和mysql数据类型对比兼容

    这篇文章主要介绍了基于PostgreSQL和mysql数据类型对比兼容,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-25