最近银桑跟同事聊到一个问题,Mysql的null底层是什么呢?同事说是特殊的空字符串'',Oracle的Null确实是空字符串'',但对于Mysql可不好说,我觉得有些疑惑就去查了下Mysql的开发语言,居然是我由爱生恨的C++。。
C++中的Null
先来说说C++中的Null吧。
先说说空指针,是由系统来保证空指针不指向任何实际的对象或者函数。反过来说,任何对象或者函数的地址都不可能是空指针。
NULL 是一个标准规定的宏定义,用来表示空指针常量。因此,除了上面的各种赋值方式之外,还可以用 p = NULL;来使 p 成为一个空指针。(tyc:很多系统中的实现:#define NULL (void*)0,与这里的“a null pointer constant”并不是完全一致的)
在标准中并没有对空指针指向内存中的哪个地方做出规定,也就是说用哪个具体的地址值(0x0 地址还是某一特定地址)表示空指针取决于系统的实现。
我们常见的空指针一般指向 0 地址,即空指针的内部用全 0 来表示(zero null pointer,零空指针);也有一些系统用一些特殊的地址值或者特殊的方式表示空指针(nonzero null pointer,非零空指针),具体请参见C FAQ。
一般来说,