NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
UTF-8 - кодирование переменной длины. В случае UTF-8 это означает, что для хранения одной кодовой точки требуется от одного до четырех байтов. Однако в кодировке MySQL, называемой «utf8», хранится максимум три байта на кодовую точку.
Таким образом, набор символов «utf8» не может хранить все кодовые точки Unicode: он поддерживает только диапазон от 0x000 до 0xFFFF, который называется « Basic Multilingual Plane ». См. Также Сравнение кодировок Unicode .
Это то, что должна сказать об этой документации MySQL :
Набор символов с именем utf8 использует максимум три байта на символ и содержит только символы BMP. Начиная с MySQL 5.5.3, набор символов utf8mb4 использует максимум четыре байта на символ, который поддерживает дополнительные символы:
- Для символа BMP utf8 и utf8mb4 имеют одинаковые характеристики хранения: одинаковые значения кода, то же кодирование одинаковой длины.
- Для дополнительного символа utf8 не может хранить символ вообще, а utf8mb4 требует четырех байтов для его сохранения. Поскольку utf8 не может хранить символ вообще, у вас нет дополнительных символов в столбцах utf8, и вам не нужно беспокоиться о преобразовании символов или об утрате данных при обновлении данных utf8 из более старых версий MySQL.
Итак, если вы хотите, чтобы ваша колонка поддерживала сохранение символов, лежащих вне BMP (и вы обычно хотите), например emoji , используйте «utf8mb4». См. Также . Каковы наиболее распространенные символы без символов BMP Unicode в реальном использовании? .
Набор символов utf8mb4
полезен, потому что в наши дни нам нужна поддержка для хранения не только символов языка, но и символов, недавно введенных emojis и т. д.
Хорошее чтение на поддержка полного Unicode в базах данных MySQL от Mathias Bynens также может пролить свет на это.
utf8
. Тем не менее, нет оснований не использоватьutf8mb4
сейчас, и действительно это необходимо для всех новых emoji, например – thomasrutter 26 August 2015 в 02:12