跟我一起学习MySQL技术内幕(第五版):(第三章学习日记2上)
3.1.2字符串值 3.1.2.1字符串类型与字符集支持 3.1.2.2字符集相关的系统变量 3.1.2.1字符串类型与字符集支持 字符串值一般可以分为两类,二进制串和非二进制串 二进制串:一组字节序列,没有特殊的比较或者排序属性. 比较操作是基于各字节的数值逐个字节实现的.
3.1.2字符串值
3.1.2.1字符串类型与字符集支持
3.1.2.2字符集相关的系统变量
3.1.2.1字符串类型与字符集支持
字符串值一般可以分为两类,二进制串和非二进制串
<code> 二进制串:一组字节序列,没有特殊的比较或者排序属性. 比较操作是基于各字节的数值逐个字节实现的. 所有字节都有意义,**甚至包括结尾的空格**. 非二进制串:一个字符序列,每个二进制串都与字符集相关. 字符集决定了:MySQL如何解释字符串内容,哪些字符可以用. 每个字符集都有一种或者多种排序规则. **尾部空格不会参与比较(TEXT类型除外-具有唯一性索引)** </code>
字符串所使用的排序规则决定了字符在字符集里的先后顺序,这会对比较操作产生影响.
默认的字符集和排序规则分别为latin1和latin_swedish_ci.
查看服务器上提供的字符集以及排序规则:
<code class=" hljs smalltalk">show character set; +----------+-----------------------------+---------------------+--------+ | <span class="hljs-class">Charset</span> | <span class="hljs-class">Description</span> | <span class="hljs-class">Default</span> collation | <span class="hljs-class">Maxlen</span> | +----------+-----------------------------+---------------------+--------+ <span class="hljs-localvars">| big5 |</span> <span class="hljs-class">Big5</span> <span class="hljs-class">Traditional</span> <span class="hljs-class">Chinese</span> <span class="hljs-localvars">| big5_chinese_ci |</span> <span class="hljs-number">2</span> | <span class="hljs-localvars">| dec8 |</span> <span class="hljs-class">DEC</span> <span class="hljs-class">West</span> <span class="hljs-class">European</span> <span class="hljs-localvars">| dec8_swedish_ci |</span> <span class="hljs-number">1</span> | <span class="hljs-localvars">| cp850 |</span> <span class="hljs-class">DOS</span> <span class="hljs-class">West</span> <span class="hljs-class">European</span> <span class="hljs-localvars">| cp850_general_ci |</span> <span class="hljs-number">1</span> | <span class="hljs-localvars">| hp8 |</span> <span class="hljs-class">HP</span> <span class="hljs-class">West</span> <span class="hljs-class">European</span> <span class="hljs-localvars">| hp8_english_ci |</span> <span class="hljs-number">1</span> | <span class="hljs-localvars">| koi8r |</span> <span class="hljs-class">KOI8</span>-<span class="hljs-class">R</span> <span class="hljs-class">Relcom</span> <span class="hljs-class">Russian</span> <span class="hljs-localvars">| koi8r_general_ci |</span> <span class="hljs-number">1</span> | ....... ....... show collation; --------------------------+----------+-----+---------+----------+---------+ | <span class="hljs-class">Collation</span> | <span class="hljs-class">Charset</span> | <span class="hljs-class">Id</span> | <span class="hljs-class">Default</span> | <span class="hljs-class">Compiled</span> | <span class="hljs-class">Sortlen</span> | +--------------------------+----------+-----+---------+----------+---------+ <span class="hljs-localvars">| big5_chinese_ci | big5 |</span> <span class="hljs-number">1</span> | <span class="hljs-class">Yes</span> | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | <span class="hljs-localvars">| big5_bin | big5 |</span> <span class="hljs-number">84</span> | | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | <span class="hljs-localvars">| dec8_swedish_ci | dec8 |</span> <span class="hljs-number">3</span> | <span class="hljs-class">Yes</span> | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | <span class="hljs-localvars">| dec8_bin | dec8 |</span> <span class="hljs-number">69</span> | | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | <span class="hljs-localvars">| cp850_general_ci | cp850 |</span> <span class="hljs-number">4</span> | <span class="hljs-class">Yes</span> | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | <span class="hljs-localvars">| cp850_bin | cp850 |</span> <span class="hljs-number">80</span> | | <span class="hljs-class">Yes</span> | <span class="hljs-number">1</span> | ........ ........</code>
每种排序规则都捆绑在某个特定的字符集上,而每个给定的字符集可以有多种排序规则.
格式: 字符集名语言名附加后缀
后缀规则如下:
_ci表示排序规则不区分大小写
_cs表示排序规则要区分大小写
_bin表示这是一种二进制排序规则.(比较操作基于数字字符编码值进行,与语言无关)
如:utf8_bin
二进制串和非二进制串的排序特性:
二: 逐字节进行比较,结果只取决于每个字节的数值大小,区分大小写(大小写不同,对应
字节数值不同,二进制串其实并没有大小写的概念区分大小写实际上是排序规则的一项功能)
非二:按字符进行比较,每一个字符的相对值取决于当前所用字符集的排序规则.大小写设定为同一排序值,所以不区分大小写(不适用于区分大小写的非二进制排序)
确定某个字符串的字符集和排序规则:
(默认情况下,MySQL会把十六进制常量当作二进制串对待)
<code class=" hljs asciidoc">select charset(x'0123'),collation(x'0123'); <span class="hljs-code">+------------------+</span>--------------------+ <span class="hljs-header">| charset(x'0123') | collation(x'0123') | +------------------+--------------------+</span> <span class="hljs-header">| binary | binary | +------------------+--------------------+</span> </code>
有两种记法约定可以用于将某个字符串强制解释为某种指定的字符集.
1._charset str
<code class=" hljs bash">_latin2 <span class="hljs-string">'abc'</span> _latin2 x<span class="hljs-string">'616263'</span> _latin2 <span class="hljs-number">0</span>x616263 _utf8 <span class="hljs-string">'def'</span> _utf8 X<span class="hljs-string">'646566'</span> _utf8 <span class="hljs-number">0</span>x646566</code>
<code>对于引号里的字符串: 字符集引导符与字符串之间空白可选 十六进制不能留有任何空白 </code>
2.N’str’(等价于_utf8’str’)
N的后面必须紧跟一个引号形式的字符串,不能有任何空白
(3.对于字符串表达式或列值的引导符记法)
<code class=" hljs cs">convert (str <span class="hljs-keyword">using</span> charset);</code>
引导符和convert是不一样的,引导符只会改变对字符串的解释,不会改变值,而convert是一个函数,进入的是输入参数,生成一个新的字符串返回.
<code class=" hljs asciidoc">set @s1 = <span class="hljs-emphasis">_ucs2 'ABCD'; set @s2 = convert ('ABCD' using ucs2); select char_</span>length(@s1), length(@s1), char<span class="hljs-emphasis">_length(@s2), length(@s2); </span> <span class="hljs-code">+------------------+</span>-------------<span class="hljs-code">+------------------+</span>-------------+ <span class="hljs-header">| char_length(@s1) | length(@s1) | char_length(@s2) | length(@s2) | +------------------+-------------+------------------+-------------+</span> <span class="hljs-header">| 2 | 4 | 4 | 8 | +------------------+-------------+------------------+-------------+</span> </code>
第一条语句:把ABCD每一对字符解释为一个双字节ucs2字符
第二条语句:把每个字符转化为相应的ucs2字符.
这一节最后介绍了二进制串与使用二进制串排序规则的非二进制串的区别.
1.二进制串没有字符集的概念.它会被解释为字节,并且比较的是单字节的数字代码
2.使用了二进制排序规则的非二进制串,会被解释为字符,并且比较的是它们的数字字符值,这种值通常是基于每个字符多个字节算出的.
<code class=" hljs asciidoc">set @s1 = binary <span class="hljs-emphasis">'abcd'</span>; set @s2 = <span class="hljs-emphasis">_latin1'abcd' collate latin1_</span>bin; select upper(@s1),upper(@s2); <span class="hljs-code">+------------+</span>------------+ <span class="hljs-header">| upper(@s1) | upper(@s2) | +------------+------------+</span> <span class="hljs-header">| abcd | ABCD | +------------+------------+</span></code>
二进制串根本没有字符集的概念,所以无从得知哪些字节值对应着大写或者小写字符.如果非要这么做,可以选择先 convert再使用upper lower函数.
3.1.2.2字符集相关的系统变量
<code>这一小节pass 暂时并没有什么用 一切使用默认就好了 </code>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.

Navicat 자체는 데이터베이스 비밀번호를 저장하지 않으며 암호화 된 암호 만 검색 할 수 있습니다. 솔루션 : 1. 비밀번호 관리자를 확인하십시오. 2. Navicat의 "비밀번호 기억"기능을 확인하십시오. 3. 데이터베이스 비밀번호를 재설정합니다. 4. 데이터베이스 관리자에게 문의하십시오.

Navicat Premium을 사용하여 데이터베이스 생성 : 데이터베이스 서버에 연결하고 연결 매개 변수를 입력하십시오. 서버를 마우스 오른쪽 버튼으로 클릭하고 데이터베이스 생성을 선택하십시오. 새 데이터베이스의 이름과 지정된 문자 세트 및 Collation의 이름을 입력하십시오. 새 데이터베이스에 연결하고 객체 브라우저에서 테이블을 만듭니다. 테이블을 마우스 오른쪽 버튼으로 클릭하고 데이터 삽입을 선택하여 데이터를 삽입하십시오.

MariaDB 용 Navicat은 암호가 암호화 된 양식으로 저장되므로 데이터베이스 비밀번호를 직접 볼 수 없습니다. 데이터베이스 보안을 보장하려면 비밀번호를 재설정하는 세 가지 방법이 있습니다. Navicat을 통해 비밀번호를 재설정하고 복잡한 비밀번호를 설정하십시오. 구성 파일을 봅니다 (권장되지 않음, 위험이 높음). 시스템 명령 줄 도구를 사용하십시오 (권장되지 않으면 명령 줄 도구에 능숙해야 함).

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

Navicat에서 SQL을 수행하는 단계 : 데이터베이스에 연결하십시오. SQL 편집기 창을 만듭니다. SQL 쿼리 또는 스크립트를 작성하십시오. 실행 버튼을 클릭하여 쿼리 또는 스크립트를 실행하십시오. 결과를 봅니다 (쿼리가 실행 된 경우).

응용 프로그램을 열고 새로운 연결 (Ctrl n)을 선택하여 Navicat에서 새로운 MySQL 연결을 만들 수 있습니다. "MySQL"을 연결 유형으로 선택하십시오. 호스트 이름/IP 주소, 포트, 사용자 이름 및 비밀번호를 입력하십시오. (선택 사항) 고급 옵션을 구성합니다. 연결을 저장하고 연결 이름을 입력하십시오.

Navicat이 데이터베이스 및 해당 솔루션에 연결할 수없는 일반적인 이유 : 1. 서버의 실행 상태를 확인하십시오. 2. 연결 정보를 확인하십시오. 3. 방화벽 설정을 조정하십시오. 4. 원격 액세스 구성; 5. 네트워크 문제 문제 해결; 6. 권한을 확인하십시오. 7. 버전 호환성을 보장합니다. 8. 다른 가능성 문제를 해결하십시오.
