• 数据库问题技巧总结


    1.mysql varchar 和 char的区别

    VARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。他们都是用来储存字符串长度小于255的字符。

    假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格

    当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。

    VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要。

    2.SQL 语句应该大写还是小写?哪种更有利于执行效率? 

    1、一般的数据库中SQL语句对大小写不敏感,一般如SQL关键字、对象名称大小写都会自动转换。但对引号内的字符串大小写会敏感。
    2、执行效率没测试过,应该影响不大,如Oracle会在发送SQL语句的客户端自动转换。使用大写还是小写主要看个人习惯(包括保留字、关键字),但还是希望个人风格能够统一或者与团队配合,如同code中的注释。
    3、部分数据是存储的是大小写,那区分就有意义了。另外数据字典中的元数据Oracle默认使用大写。oracle编译的时候都会把所有字母变成大写,理论上写大写是会快那么一丁点的。一般按照规范都会把关键字和表名写成大写,方便大家阅读!

    3.文本字段用单引号还是双引号问题

    SQL在文本值周围使用单引号(大多数数据库系统也接受双引号)。

    如果是数值字段,则不要使用引号。

    4.两个单引号问题

    如果是查询条件,应该尽可能使用参数化查询。
    
    实在是要单引号,那就再加一个单引号来转义。
    
    用两个单引号,表示一个单引号。
    
    比如查询Name为abc'cc的
    
    SELECT * FROM [TABLE] WHERE [Name] = 'abc''cc'

     5.NULL问题

    SQL 中,NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。

    值为 NULL 的字段没有值。尤其要明白的是,NULL 值与 0 或者包含空白(spaces)的字段是不同的。

    具有NULL值的字段是没有值的字段。

    如果表中的字段是可选的,则可以插入新记录或更新记录而不向该字段添加值。然后,该字段将被保存为NULL值。 

    使用比较运算符(例如=,<或<>)来测试NULL值是不可行的。

    我们将不得不使用IS NULL和IS NOT NULL运算符。

    NULL 值会给选取数据带来麻烦不过,因为 NULL 和其他任何值作比较,其结果总是未知的,所以含有 NULL 的记录不会包含在最终结果里面。

    6.FOREIGN KEY

    FOREIGN KEY 约束用于预防破坏表之间连接的行为。

    FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

    7.Oracle 中varchar2 为什么要加上2?

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
    2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
    3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
    大部分情况下建议使用varchar2类型,可以保证更好的兼容性

     8.java向mysql插入汉字乱码问题

    1.首先保证项目和类的编码全部为UTF-8。
    
    2.保证数据库的编码位UTF-8.
    
    果数据库开始就建立好了:
    
    alter database 表名 character set utf8;
    连接数据库设置编码:
    jdbc:mysql://地址:3306/数据库名?characterEncoding=utf8
    
    3.如果还不行
    
    1)MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是/etc/my.cnf
    
    --在 [mysqld] 标签下加上以下内容:
    
    default-character-set = utf8
    
    character_set_server = utf8
    
    注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。
    
    --在 [mysql]  标签下加上一行
    
    default-character-set = utf8
    
     
    
    --在 [mysql.server]标签下加上一行
    
    default-character-set = utf8
    
     
    
    --在 [mysqld_safe]标签下加上一行
    
    default-character-set = utf8
    
     
    
    --在 [client]标签下加上一行
    
    default-character-set = utf8
    
     
    
    2)、  重新启动MySql服务
    
    Windows可在服务管理器中操作,也可使用命令行:
    
    net stop mysql 回车
    
    net start mysql 回车
    
    服务名可能不一定为mysql,请按自己的设置
    
    Linux下面可是用 service mysql restart
    
    如果出现启动失败,请检查配置文件有没有设置错误
    
    3、  查看设置结果
    登录MySql命令行客户端:打开命令行
    
    mysql –uroot –p 回车
    
    输入密码
    
    进入mysql后 执行 :show variables like "% character %";
    显示结果应该类似如下:
    
    | character_set_client | utf8 |
    
    | character_set_connection | utf8 |
    
    | character_set_database | utf8 |
    
    | character_set_results | utf8 |
    
    | character_set_server | utf8 |
    
    | character_set_system | utf8 |
    
    | character_sets_dir | /usr/share/mysql/charsets/ |
    
    如果仍有编码不是utf8的,请检查配置文件,也可使用mysql命令设置:
    
    set character_set_client = utf8;
    
    set character_set_server = utf8;
    
    set character_set_connection = utf8;
    
    set character_set_database = utf8;
    
    set character_set_results = utf8;
    
    set collation_connection = utf8_general_ci;
    
    set collation_database = utf8_general_ci;
    
    set collation_server = utf8_general_ci;
    
    另外:
    
    建立数据库时可以使用以下命令:
    
    create database app_relation character set utf8; 
    
    use app_relation;
    
    source app_relation.sql;
    
    修改数据库编码的命令为:
    
    alter database app_relation character set utf8; 
  • 相关阅读:
    AJAX请求 $.post方法的使用
    通过jQuery Ajax使用FormData对象上传文件
    iframe跨域访问
    js编码解码
    ajax头像上传
    无边框窗体和用户控件以及权限
    只开启一个窗体和进程以及多线程的操作
    通过一个窗体操作另一个窗体
    流和打印控件用法
    listview和简单的记事本操作
  • 原文地址:https://www.cnblogs.com/lukelook/p/9584071.html
Copyright © 2020-2023  润新知