Haha, this is the code in storage/innobase/handler/ha_innodb.cc:
3260 ▸ if (innobase_buffer_pool_instances == 0) {
3261 ▸ ▸ innobase_buffer_pool_instances = 8;
3262
3263 #if defined(__WIN__) && !defined(_WIN64)
3264 ▸ ▸ if (innobase_buffer_pool_size > 1331 * 1024 * 1024) {
3265 ▸ ▸ ▸ innobase_buffer_pool_instances
3266 ▸ ▸ ▸ ▸ = ut_min(MAX_BUFFER_POOLS,
3267 ▸ ▸ ▸ ▸ ▸ (long) (innobase_buffer_pool_size
3268 ▸ ▸ ▸ ▸ ▸ / (128 * 1024 * 1024)));
3269 ▸ ▸ }
3270 #endif /* defined(__WIN__) && !defined(_WIN64) */
3271 ▸ }
So basically 0 means 8 unless you're on 32-bit Windows where it means one per 128 MiB of buffer pool, but only if the buffer pool is bigger than 1.3 GiB.
Gotta love the lack of comments.
Basically 0 is the default for the actual parameters, but it's fixed up to 8 at runtime. So the --help output will show 0 even though it will end up with 8 (or N). It's basically using 0 as a way to say "the user didn't specify, so figure it out".
Regards,
Jeremy