• 中文数据问题


    中文数据问题

    中文数据问题本质是字符集问题

    计算机只是别二进制:人类更多是识别符号:需要有个二进制与字符的对应关系(字符集)

    客户端向服务端插入中文数据:没有成功

    原因:xD5xC5xD4xBD 代表的是 '张悦' 在当前编码(字符集)下对应的二进制编码转换成的十六进制:两个汉字 -->四个字节(GBK)

    报错:服务器没有识别对应的四个字节:服务器认为数据是 UTF8,一个汉字有三个字节:读取三个字节转换成汉字(失败),剩余的再度三个字节(并不够):最终失败

    所有的数据库服务器认为(表现的)一些特性都是通过服务器端的变量来保存:系统先读取自己的变量,看看应该怎么表现


    // 查看服务器到底识别哪些字符集
    show character set;

    基本上:服务器是万能的,什么字符集都支持
    //既然服务器 识别这么多:总有一种是服务器默认的跟客户端打交道的字符集

    查看服务器默认的对外处理的字符集
    show variables like 'character_set%' ;

    问题根源:客户端数据只能是GBK,而服务器认为是utf8:矛盾产生
    解决方案:改变服务器,默认的接收字符集为GBK;
    set character_set_client =gbk;

    插入中文的效果

    原因:数据来源是服务器,解析数据是客户端(客户端只识别GBK:只会两个字节一个汉字):
    但是事实服务器给的数据却是utf8,三个字节一个汉字:乱码

    解决方案:修改服务器给客户端的数据字符集为GBK

    set character_set_results =gbk;
    set 变量 = 值; 修改只是会话级别(当前客户端,当次连接有效:关闭失效)

    设置服务器对客户端的字符集的认识:可以使用快捷方式:set names 字符集
    set names gbk; ===>等价于 character_set_client , character_set_result ,character_set_connection

    connection连接层:是字符集转变的中间这,如果统一了效率更高,不统一也没问题


    校对集问题

    校对集:数据比较的方式

    校对集有三种格式
    _bin:binary二进制比较,取出二进制位,一位一位的比较,区分大小写
    _cs:case sensitive,大小写敏感,区分大小写
    _ci:case insensitice,大小写不敏感,不区分大小写

    查看数据库所支持的校对集: show collation;


    校对集应用:只有当数据进行比较时, 校对集才会生效

    默认是的utf_general_ci 校对集

    对比:使用utf8的_bin 和 _ci来验证 两种不同的校对集效果

    1.创建不同的校对集的表


    2. 插入数据

     


    3. 比较:根据某个字段进行排序:order by 字段名 [asc/desc] ;asc 升序 , desc 降序 默认为升序


    校对集:必须在没有数据之前声明好,如果有了数据,那么在进行校对集修改,那么修改无效

    web 乱码问题

    动态网站有三个部分构成: 浏览器,apache ,服务器(php),数据库服务器,三个部分都有自己的字符集(中文),数据需要在三个部分之间来回传递:很容易产生乱码

    如何解决乱码问题:统一编码(三码合一)

    但是事实上不可能:浏览器是用户管理(根本不可能控制)
    但是必须要解决这些问题:主要靠php来做

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    sql-DDL, DML 常用语句
    7.8 Structured Streaming
    7.7 输出操作
    7.6 转换操作
    7.5 高级数据源---Kafka
    7.4 基本输入源
    7.3 DStream操作
    7.2 Spark Streaming
    7.1 流计算概述
    6.3 使用Spark SQL读写数据库
  • 原文地址:https://www.cnblogs.com/sunhao96/p/7545740.html
Copyright © 2020-2023  润新知